Angular ngController vs Controller在Directive中构建

Pat*_*ick 10 javascript angularjs angularjs-controller

我想知道这两种创建控制器的方法的用例是什么:

使用ngController:

myApp.controller('myController', ['$scope', function ( $scope ) {

}]);
Run Code Online (Sandbox Code Playgroud)

使用controller属性在指令内构造控制器:

myApp.directive ( 'myDirective', [ '$window', function( $window ) {
    return {
        restrict: 'A',
        controller: [ '$scope', function( $scope ) {

        }],
        link: function( scope, element, attrs ) {

        }
    };
}]);
Run Code Online (Sandbox Code Playgroud)

如果在同一个元素上调用控制器,你有没有理由不在指令中构造控制器?

这只是控制器的广泛使用/复杂程度的问题吗?

Kha*_* TO 8

使用指令控制器的原因用一句话压缩:

创建可重用的组件

指令控制器应包含可以重用的组件的逻辑.将指令控制器与隔离范围一起使用是创建可重用组件的方法.

以分页器为例:分页器需要一些逻辑来通知当前所选页面的其他组件(例如网格)已更改,以便网格可以相应地更新.这些逻辑可以写在指令控制器中以便重用.与隔离范围一起使用时,此范围对应用程序控制器的范围并不严格,您可以轻松地将pageSize配置为绑定到应用程序控制器范围的任何属性.


gan*_*raj 5

普通控制器(使用ng-controller或路由创建的控制器)和指令控制器之间存在细微差别.

  1. 指令控制器允许注入$element.请注意,虽然目前您也可以注入$element普通控制器,但这样做的做法不好.

  2. 指令控制器的唯一目的是指令指令通信.一个非常好的用例是在AngularJS的主页面上显示标签组件.

指令控制器允许指令具有功能.因为这些控制器实例可以在其他指令中"需要" - 其他指令可以使用控制器实例在该指令上进行通信/操作.

使用带有指令的控制器的唯一原因是,如果要对指令通信执行某种指令.对于其他任何事情,您应该坚持scope在链接功能中编写所有逻辑.