2

私はその厄介なAngularの縮小問題に遭遇しています(この問題がAngular 2に存在しないことを本当に願っています)

すべてのアプリ モジュール インジェクションをコメント アウトし、リストを 1 つずつ下に移動して、問題がどこにあるかを調べました。

私が間違っていることがわかりますか?

元のコードでは、次のエラーが発生します Unknown provider: eProvider <- e

(function() { "use strict";

    var app = angular.module('searchPopoverDirectives', [])

    .directive('searchPopover', function() {
        return {
            templateUrl : "popovers/searchPopover/searchPopover.html",
            restrict    : "E",
            scope       : false,
            controller  : function($scope) {

                // Init SearchPopover scope:
                // -------------------------
                var vs = $scope;
                vs.searchPopoverDisplay = false;

            }
        }
    })

})();

次に[]、縮小の問題を修正するために構文を試してみたところ、次のエラーが発生 Unknown provider: $scopeProvider <- $scope <- searchPopoverDirectiveしました。

(function() { "use strict";

    var app = angular.module('searchPopoverDirectives', [])

    .directive('searchPopover', ['$scope', function($scope) {
        return {
            templateUrl : "popovers/searchPopover/searchPopover.html",
            restrict    : "E",
            scope       : false,
            controller  : function($scope) {

                // Init SearchPopover scope:
                // -------------------------
                var vs = $scope;
                vs.searchPopoverDisplay = false;

            }
        }
    }])

})();

更新: また、この男が問題を引き起こしていることがわかりました:

.directive('focusMe', function($timeout, $parse) {
    return {
        link: function(scope, element, attrs) {
            var model = $parse(attrs.focusMe);
            scope.$watch(model, function(value) {
                if (value === true) { 
                    $timeout(function() {
                        element[0].focus(); 
                    });
                }
            });
            element.bind('blur', function() {
                scope.$apply(model.assign(scope, false));
            })
        }
    }
})
4

2 に答える 2

8

コードを縮小すると、すべてのコードが縮小されるため、

controller  : function($scope) {

のようなものに縮小されました

controller  : function(e) {

だから、ただ使う

controller  : ["$scope", function($scope) { ... }]
于 2015-05-08T15:28:35.640 に答える
4

javascript を縮小すると、パラメーター名が変更されますが、文字列は同じままです。注入する必要があるサービスを定義するには、次の 2 つの方法があります。

  1. インライン注釈:

    phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http){
        ...
    }]);
    
  2. $injectプロパティの使用:

    phonecatApp.controller('PhoneListCtrl', PhoneListCtrl);
    
    PhoneListCtrl.$inject = ['$scope', '$http'];
    
    function PhoneListCtrl($scope, $http){
        ...
    }
    

を使用する$injectと、インライン アノテーションより読みやすいと見なされます。controllerservice、またはを宣言するdirective1 行、インジェクション値を定義する 1 行、最後に実装方法を常に 1 行にすることをお勧めします。メソッドは、javascript の巻き上げの性質により、最後に定義される場合があります。

覚えておいてください: 注釈 (文字列) と関数パラメーターの順序は同じでなければなりません!

于 2015-05-08T16:24:10.110 に答える