Angularjs 同一指令的两个实例相互干扰?

Angularjs 同一指令的两个实例相互干扰?,angularjs,scope,directive,Angularjs,Scope,Directive,为了查明我的错误,我在视图中创建了同一指令的两个实例: <criterion-news state="ctrl.state"> </criterion-news> <criterion-news state="null"> </criterion-news> 有什么不对劲吗 编辑:我的指令包含由功能id标识的复选框。问题是在两个实例中重复了相同的id。我在复选框id中添加了一个随机生成的指令实例id,现在它就像一个符咒:我的状态是独立的。

为了查明我的错误,我在视图中创建了同一指令的两个实例:

<criterion-news
  state="ctrl.state">
</criterion-news>
<criterion-news
  state="null">
</criterion-news>
有什么不对劲吗

编辑:我的指令包含由功能id标识的复选框。问题是在两个实例中重复了相同的id。我在复选框id中添加了一个随机生成的指令实例id,现在它就像一个符咒:我的状态是独立的。

尝试更改:

scope: { "state": "=" },
致:


您需要类似于此示例的代码:

angular
.模块(“启动器”、[])
.controller('TestController',['$scope',函数($scope){
$scope.ctrl=this;
$scope.state=[1,2,3];
$scope.teste=“ABCD”;
}])
.指令(“准则”,函数(){
返回{
限制:“E”,
范围:{
状态:“=状态”
},        
模板:'
  • {{i}
' }; });
谢谢您的回复。不幸的是,没有任何行为改变。目前这里没有足够的信息来测试我的理论,但如果我不得不猜测,那就是您对父控制器和子指令控制器都使用了相同的别名(
ctrl
)。当您在子对象中引用
ctrl.state
时,它会看到父对象上的属性。如果您的指令类似于
controllerAs:“newsDir”
,那么当您引用
newsDir.state
时,它将找不到该属性,尽管您仍然可以引用
ctrl.state
…通常,我建议不要使用
ctrl
vm
,或者在使用
controllerAs
时使用类似的任何其他通用工具。使用
controllerAs
的一个优点是,更容易看到要修改的对象,但是当所有对象都被命名为同一个对象时,更容易出现此类错误,更重要的是,如果每个控制器都是按其用途命名的,那么就不那么清晰了。
scope: { "state": "=" },
scope: { "state": "=state" },
  angular
.module("starter", [])
.controller('TestController', ['$scope', function ($scope) {
  $scope.ctrl = this;
   $scope.state = [1,2,3];
  $scope.teste = "ABCD";
}])
.directive("criterionNews", function() {
  return {
    restrict: "E",
    scope: {
      state: "=state"
    },        
    template: '<ul><li ng-repeat="i in state">{{i}}</li></ul>'               
  };
});