我一直在尝试解决这个问题,但我无法找到描述它的地方,而且我的测试没有给我任何答案。
我创建了一个自定义指令,我希望指令的范围是父范围的子范围。我找到了两种解决这个问题的方法。
A:
angular.module('myModule').directive('myDirective', function(){
return{
scope: true,
template: '<div>{{var}}</div>',
controller: function($scope){
$scope.var = 123;
}
};
});
B:
angular.module('myModule').directive('myDirective', function(){
return{
scope: false,
template: '<div ng-controller="MyController">{{var}}</div>'
};
});
angular.module('myModule').controller('MyController', function($scope){
$scope.var = 123;
});
这两种方法有什么区别?两者似乎都做我想要的,但使用一种方法比另一种方法有哪些优点/缺点?
感谢任何指导。
答案 0 :(得分:2)
除非你有充分的理由这样做,否则你不应该使用后者。如果要创建可重用的控制器并在指令中使用它,只需将指令定义为:
angular.module('myModule').directive('myDirective', function(){
return{
scope: false,
controller: 'MyController',
template: '{{var}}'
};
});
答案 1 :(得分:1)
第二种方法允许您在多个元素上重用控制器。第一个是明确的,可以分享。
答案 2 :(得分:1)
选项B似乎能够共享控制器。但是,从设计角度来看,不应共享控制器。控制器应包含一些特定的业务逻辑。
如果要共享某些模型/操作,请提取到服务。