【发布时间】:2015-11-15 14:03:02
【问题描述】:
我有一个带有指令的控制器/视图。该指令更改控制器范围正在监视的变量。在我缩小所有内容之前,这非常有效。一旦缩小,没有错误,但手表处理程序不再触发。
我的应用程序是由grunt 使用yeoman 角度生成器编译的。经过大量工作,它正在正确构建所有内容(通过grunt serve:dist)。除了 watch 函数处理程序不工作之外,应用程序的其余部分都很好。在开发过程中,一切正常。
我很确定我的所有依赖项都已声明以避免任何缩小问题。我还使用ngAnnotate 来清理我错过的任何内容。可能是什么问题呢?
这是一个简化的例子:
控制器:
(function(){
'use strict';
angular
.module('app')
.controller('MyCtrl', MyCtrl);
MyCtrl.$inject = ['$scope', ...];
function MyCtrl($scope, ...) {
$scope.color = null;
$scope.$watch('color', function(newVal, oldVal) {
console.log('Color changed');
});
};
})();
查看:
<mydirective color="color"></mydirective>
指令:
(function(){
'use strict';
angular
.module('app')
.directive('mydirective', mydirective);
function mydirective() {
return {
restrict: 'E',
scope: {
color: '=color'
},
templateUrl: 'directive.html',
link: function($scope, element, attrs, form) {
$scope.clickHandler = function(val) {
$scope.color = val;
};
}
};
}
})();
指令模板:
<button ng-click="clickHandler('blue')"></button>
【问题讨论】:
-
这是在黑暗中的镜头,但您可以尝试将 $scope 更改为指令中的范围。我在某处读到,在指令中您应该使用范围而不是 $scope,因为它不是依赖注入。
-
实际上是个好建议,但不幸的是它没有任何区别。关闭
uglify后问题仍然存在,所以看起来它实际上是一个普遍的构建问题。我感觉这可能与模板缓存有关。我得做更多的调查