簡體   English   中英

注入工廠時Angular停止工作

[英]Angular stops working when injecting a factory

我有決心將服務和工廠注入其中。 當我注入一個工廠時,我剛剛創建了一個名為ValidationMatrixFactory的工廠,但現在沒有任何工作了。 主頁已加載,但鏈接不再解析,基本上單擊任何內容均無效。 Angular不會引發任何錯誤。 一切都停止了工作。 我嘗試了多種瀏覽器,重新啟動IIS,但都沒有效果。

解決方案中的console.log語句從未命中。 解決方法如下:

        resolve: {
            eventData: ['$http', '$stateParams', 'ViewMatrixService', 'ValidationMatrixFactory', function ($http, $stateParams, ViewMatrixService, ValidationMatrixFactory) {
                console.log('EventId: ' + $stateParams.eventId);
                return $http.get('http://localhost:10569/api/eventView/' + $stateParams.eventId).then(function (response) {
                    ViewMatrixService.GenerateViewMatrix(response.data);
                    ValidationMatrixFactory.GenerateValidationMatrix(response.data);
                    return response.data;
                });
            }]
        }

如果我刪除對ValidationMatrixFactory的引用,則一切正常。 ValidationMatrixFactory與ViewMatrixService非常相似,因此我不確定為什么現在是一個問題。

這是ValidationMatrixFactory:

angular.module('myWebApp.services')
    .factory('ValidationMatrixFactory', function() {
        var ValidationMatrixFactory = {};

        ValidationMatrixFactory.GenerateValidationMatrix = function (eventData) {
            var currentStage = eventData.CoreEvent.Stage;
            initializeValidationMatrix();
            determineRequiredFields(currentStage);
        }

        function initializeValidationMatrix() {
            ValidationMatrixFactory.EventTitleRequired = false;
            ValidationMatrixFactory.EventSummaryRequired = false;
            ValidationMatrixFactory.DesiredPublicationDateRequired = false;
            ValidationMatrixFactory.DesiredEffectiveDateRequired = false;
            ValidationMatrixFactory.ReasonForDesiredEffectiveDateRequired = false;
            ValidationMatrixFactory.AssessmentTargetDateRequired = false;
            ValidationMatrixFactory.FRSOTargetDateRequired = false;
            ValidationMatrixFactory.BLRTargetDateRequired = false;
            ValidationMatrixFactory.SSOTargetDateRequired = false;
            ValidationMatrixFactory.BLSOTargetDateRequired = false;
            ValidationMatrixFactory.FSOTargetDateRequired = false;
            ValidationMatrixFactory.PublicationTargetDateRequired = false;
            ValidationMatrixFactory.EffectiveTargetDateRequired = false;
            ValidationMatrixFactory.RMRequired = false;
            ValidationMatrixFactory.PublisherRequired = false;
            ValidationMatrixFactory.MoPRequired = false;
            ValidationMatrixFactory.PriorityRequired = false;
        }

        function determineRequiredFields(currentStage) {
            ValidationMatrixFactory.EventTitleRequired = true;
            ValidationMatrixFactory.EventSummaryRequired = true;
            ValidationMatrixFactory.ReasonForDesiredEffectiveDateRequired = true;
            ValidationMatrixFactory.DesiredPublicationDateRequired = true;
            ValidationMatrixFactory.DesiredEffectiveDateRequired = true;

            if (currentStage.StageNumber > 1) {
                ValidationMatrixFactory.AssessmentTargetDateRequired = true;
                ValidationMatrixFactory.FRSOTargetDateRequired = true;
                ValidationMatrixFactory.BLRTargetDateRequired = true;
                ValidationMatrixFactory.SSOTargetDateRequired = true;
                ValidationMatrixFactory.BLSOTargetDateRequired = true;
                ValidationMatrixFactory.FSOTargetDateRequired = true;
                ValidationMatrixFactory.PublicationTargetDateRequired = true;
                ValidationMatrixFactory.EffectiveTargetDateRequired = true;
                ValidationMatrixFactory.RMRequired = true;
                ValidationMatrixFactory.PublisherRequired = true;
                ValidationMatrixFactory.MoPRequired = true;
            }

            if (currentStage.StageNumber > 2) {
                ValidationMatrixFactory.PriorityRequired = true;
            }
        }

        ValidationMatrixFactory.ValidateFields = function (saveType) {

        }
    });

我在index.html中有對該腳本的引用。

    <script src="libraries/angular/1.4.8/angular.min.js"></script>
    <script src="libraries/angular/1.4.8/angular-animate.min.js"></script>
    <script src="libraries/angular-ui-router/0.2.14/angular-ui-router.min.js"></script>
    <script src="libraries/angular-scroll/angular-scroll.min.js"></script>
    <script src="libraries/uiboostrap/0.14.3/ui-bootstrap-tpls-0.14.3.min.js"></script>
    <script src="libraries/dirPagination/dirPagination.js"></script>
    <script src="libraries/angular-loading-bar/loading-bar.js"></script>
    <script src="libraries/ng-file-upload/ng-file-upload.min.js"></script>
    <script src="libraries/ng-file-upload/ng-file-upload-shim.min.js"></script>
    <script src="js/app.services.js"></script>
    <script src="js/view.matrix.service.js"></script>
    <script src="js/validation.matrix.factory.js"></script>
    <script src="js/utility.service.js"></script>
    <script src="js/app.controllers.js"></script>
    <script src="partials/events/EventCtrl.js"></script>
    <script src="partials/events/EventHeaderCtrl.js"></script>
    <script src="partials/events/EventOverviewTabCtrl.js"></script>
    <script src="partials/events/EventAdditionalInformationTabCtrl.js"></script>
    <script src="partials/events/EventDSOTabCtrl.js"></script>
    <script src="partials/events/EventFooterCtrl.js"></script>
    <script src="js/nonAngular.js"></script>
    <script src="js/app.js"></script>

您必須從工廠返回ValidationMatrixFactory對象。

.factory是一種通常以名稱和函數作為參數調用的方法。 該函數只是必須返回對象的函數。 如果不返回任何內容,Angular將陷入無限的摘要中。

如果您使用.service ,則最好不要返回任何內容。 那是因為服務是構造函數。 你可以有this的服務功能,並添加屬性this

更新

看起來在angularjs 1.3.4版之前,沒有引發任何錯誤。 從1.3.4版開始,無限摘要將引發錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM