在AngularJS的指令隔离范围中使用方法是最佳实践吗?

时间:2015-04-14 11:58:52

标签: javascript angularjs

我想知道,当我们有具有隔离范围的指令时,在隔离范围内使用方法是一个好习惯,或者我们应该在指令的父范围和方法中创建一个方法。将其作为对“&”的指令的引用传递。

例如,在下面的代码中,我在指令的隔离范围&中创建了“doSomething”方法。该指令使用三次(根据数据)。那么,现在angular会在每个隔离范围内创建方法“doSomething”对象3次,还是只有一个方法由3个隔离范围共享?

angular.module("app", []).directive('appDirective', appDirective);

function appDirective() {
  var directive = {
    restrict: 'EA',
    template: '<span>{{obj.name}} <input type="checkbox" ng-model="obj.flag" ng-change="doSmothing(obj.flag)"></span> {{obj}}',
    replace: false,
    controller: controllerFunction,
    scope: {
      obj: '=appDirective'
    }
  };

  function controllerFunction($scope) {
    $scope.doSmothing = function(flag) {
      console.log($scope.obj, flag);
    }

  }
  return directive;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-app="app">

<body>
  <div>
    <ul ng-init="data=[{name:'Shiva',flag:false},{name:'Kumar',flag:false},{name:'Govind',flag:false}]">
      <li ng-repeat="d in data">
        <p app-directive="d"></p>
      </li>
    </ul>
  </div>
</body>

</html>

1 个答案:

答案 0 :(得分:0)

在棱角分明的文档中,我发现了我怀疑的确切说明。可以将“doSomething”方法放在“控制器”中的副作用域中,因为,控制器在预链接阶段之前被实例化,并与其他指令共享。这允许指令相互通信并增强彼此的行为。

check angular doc link