我还有另一个缩小问题。这次是因为传递给指令控制器的$ scope服务。见下面的代码:
angular.module('person.directives').
directive("person", ['$dialog', function($dialog) {
return {
restrict: "E",
templateUrl: "person/views/person.html",
replace: true,
scope: {
myPerson: '='
},
controller: function ($scope)
{
$scope.test = 3;
}
}
}]);
如果我注释掉控制器部分,那么它可以正常工作。
正如您所看到的,我已经使用了指令的数组声明,因此即使在缩小之后,Angular也会知道$ dialog服务。但是我应该如何为控制器上的$ scope服务做呢?
答案 0 :(得分:75)
您需要按如下方式声明控制器:
controller: ['$scope', function ($scope)
{
$scope.test = 3;
}]
这里有完整的例子:
angular.module('person.directives').
directive("person", ['$dialog', function($dialog) {
return {
restrict: "E",
templateUrl: "person/views/person.html",
replace: true,
scope: {
myPerson: '='
},
controller: ['$scope', function ($scope)
{
$scope.test = 3;
}]
}
}]);
@Sam提供的解决方案可以解决,但这意味着将指令的控制器暴露给整个应用程序,这是不必要的。
答案 1 :(得分:1)
好的,我最终在一个单独的文件中创建了控制器:
angular.module('person.controllers').controller('personCtrl', ['$scope', function ($scope) {
$scope.test = 3;
}]);
然后在指令中,我按名称分配控制器:
controller: 'personCtrl'
不确定这是最好的方法。它看起来很干净。你怎么看 ?