ng-controller和controller属性之间的区别

时间:2015-07-21 08:22:40

标签: angularjs

我一直在尝试解决这个问题,但我无法找到描述它的地方,而且我的测试没有给我任何答案。

我创建了一个自定义指令,我希望指令的范围是父范围的子范围。我找到了两种解决这个问题的方法。

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;
});

这两种方法有什么区别?两者似乎都做我想要的,但使用一种方法比另一种方法有哪些优点/缺点?

感谢任何指导。

3 个答案:

答案 0 :(得分:2)

除非你有充分的理由这样做,否则你不应该使用后者。如果要创建可重用的控制器并在指令中使用它,只需将指令定义为:

angular.module('myModule').directive('myDirective', function(){
    return{
        scope: false,
        controller: 'MyController',
        template: '{{var}}'
    };
});

答案 1 :(得分:1)

第二种方法允许您在多个元素上重用控制器。第一个是明确的,可以分享。

答案 2 :(得分:1)

选项B似乎能够共享控制器。但是,从设计角度来看,不应共享控制器。控制器应包含一些特定的业务逻辑。

如果要共享某些模型/操作,请提取到服务。