我的 Angularjs 缩小错误在哪里?错误$注入器
Where is my Angularjs minify error? Error $injector
我 运行 遇到那个恼人的 Angular 缩小问题(我真的希望这个问题在 Angular 2 中不存在)
我已经注释掉了我所有的应用程序模块注入,并逐一查看列表以找出问题所在,我想我已将其缩小到我的 searchPopoverDirectives :
你能看出我做错了什么吗?
原始代码,生成 this error 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;
}
}
})
})();
然后我尝试了 []
语法,试图修复缩小问题,并将 运行 变成 this error 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));
})
}
}
})
当您缩小代码时,它会缩小所有代码,因此您的
controller : function($scope) {
被缩小为
controller : function(e) {
所以,只需使用
controller : ["$scope", function($scope) { ... }]
缩小 javascript 时,参数名称会更改,但字符串保持不变。
您可以通过两种方式定义需要注入的服务:
内联注释:
phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http){
...
}]);
使用 $inject
属性:
phonecatApp.controller('PhoneListCtrl', PhoneListCtrl);
PhoneListCtrl.$inject = ['$scope', '$http'];
function PhoneListCtrl($scope, $http){
...
}
使用 $inject
被认为比内联注释更具可读性。最好的做法是始终用一行声明 controller
、service
或 directive
,一行用于定义注入值,最后是实现方法。由于javascript.
的吊装性质,方法可能是最后定义的
记住:注解(字符串)的顺序和函数参数的顺序必须一致!
我 运行 遇到那个恼人的 Angular 缩小问题(我真的希望这个问题在 Angular 2 中不存在)
我已经注释掉了我所有的应用程序模块注入,并逐一查看列表以找出问题所在,我想我已将其缩小到我的 searchPopoverDirectives :
你能看出我做错了什么吗?
原始代码,生成 this error 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;
}
}
})
})();
然后我尝试了 []
语法,试图修复缩小问题,并将 运行 变成 this error 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));
})
}
}
})
当您缩小代码时,它会缩小所有代码,因此您的
controller : function($scope) {
被缩小为
controller : function(e) {
所以,只需使用
controller : ["$scope", function($scope) { ... }]
缩小 javascript 时,参数名称会更改,但字符串保持不变。 您可以通过两种方式定义需要注入的服务:
内联注释:
phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http){ ... }]);
使用
$inject
属性:phonecatApp.controller('PhoneListCtrl', PhoneListCtrl); PhoneListCtrl.$inject = ['$scope', '$http']; function PhoneListCtrl($scope, $http){ ... }
使用 $inject
被认为比内联注释更具可读性。最好的做法是始终用一行声明 controller
、service
或 directive
,一行用于定义注入值,最后是实现方法。由于javascript.
记住:注解(字符串)的顺序和函数参数的顺序必须一致!