Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 当指令在NGS中重复时的绑定问题_Angularjs - Fatal编程技术网

Angularjs 当指令在NGS中重复时的绑定问题

Angularjs 当指令在NGS中重复时的绑定问题,angularjs,Angularjs,这就是它的样子,下面是 在该指令中,有一个属性是双向绑定,父范围中有一个变量 但这并不是我想要的。(但我能理解为什么它不起作用) 原因是ngRepeat将创建自己的作用域,因此,一旦指令中的变量发生更改,就可以在ngRepeat中添加一个变量,但它将保持父级中的变量不变 我可以做一些像scope.$parent.$parent.variable这样的事情来更改变量,但这不是Angular中的想法 我该怎么办 此外,如果我更改items集合中的重复项,则无法更改该项 出于上述相同的原因。编辑(再次

这就是它的样子,下面是

在该指令中,有一个属性是双向绑定,父范围中有一个变量

但这并不是我想要的。(但我能理解为什么它不起作用)

原因是ngRepeat将创建自己的作用域,因此,一旦指令中的变量发生更改,就可以在ngRepeat中添加一个变量,但它将保持父级中的变量不变

我可以做一些像scope.$parent.$parent.variable这样的事情来更改变量,但这不是Angular中的想法

我该怎么办

此外,如果我更改items集合中的重复项,则无法更改该项

出于上述相同的原因。

编辑(再次):问题似乎在于数组中需要引用类型,例如对象或数组

格洛比的评论完全正确。双向绑定不起作用,因为Angular似乎在第二个作用域对之间创建原语类型(字符串、数字等)的副本。所以当您在两个作用域之间嵌套双向绑定的基本体类型时,这很好,因为它使用一个实例,但当您将其嵌套到多个深度时,它将创建基本体的副本,并且您不再更新同一实例

app.controller('MainCtrl',函数($scope){
$scope.items=[
{文本:'苹果'},
{文本:'香蕉'},
{文本:“橙子”}
];
$scope.addItem=函数(){
$scope.items.push({text:'test'});
};
});
应用指令('测试',函数(){
返回{
限制:'E',
范围:{
foo:'=foo'
},
模板:“{foo}}}bar”,
控制器:函数($scope){
$scope.bar=函数(){
$scope.foo+='!';
};
}    
};
});

以防它有助于尝试绑定到非基本类型(如对象)。除非绑定到原语,否则即使创建了子作用域,绑定仍应按预期工作。请参阅了解更多信息。不,这不是我要求的。无论如何,谢谢。一个$emit就可以了,但我不喜欢这个答案。。感觉外面有更好的东西:把活动泡泡起来,这很管用,但我对youThanks@Gloopy也有同样的感觉,事实证明你说得对。我应该更仔细地阅读那篇文章。谢谢你的回复:)我用了你的例子,但家长没有改变。我想
范围。$parent
是NGRepeat创建的范围,我想我已经找到了。格洛比的上述评论完全正确。您需要绑定到引用类型。谢谢!我也再次发现了一些关于这个的讨论,先生@blesh,你节省了我的时间。
parent scope 
   ng-repeat
       directive
app.controller('MainCtrl', function($scope) {
  $scope.items = [
    { text: 'apples' },
    { text: 'bananas' },
    { text: 'oranges' }
  ];
  $scope.addItem = function(){
    $scope.items.push({ text: 'test' });
  };
});

app.directive('test', function(){
  return {
    restrict: 'E',
    scope: {
      foo: '=foo'
    },
    template: '<div>{{foo}} <a ng-click="bar()">bar</a></div>',
    controller: function($scope){ 
      $scope.bar = function() {
        $scope.foo += '!';
      };
    }    
  };
});