$ parent属性如何在angular中工作?

时间:2015-01-28 23:07:05

标签: angularjs

为什么范围。$ parent工作在某些情况下填充父级的属性而不是其他情况?

我在视图中指定了以下2个指令:

<directive1
    model="model1"
    ng-repeat="bar in bars"
    formCtrl="$parent.forms[bar.id]"></directive1>

<directive2
    model="model2"
    formCtrl="forms.foo"></directive2>

在第一个指令中,如果我不使用$ parent.forms,则表单属性不会填充从bars集合生成的那些表单。在第二个指令中,如果我使用$ parent.forms,则表单属性不会填充foo表单。

我的指令中的绑定范围是这样的:

scope:
    model: '='
    form: '='

如果我遗漏任何细节以便更清楚,请告诉我。

1 个答案:

答案 0 :(得分:2)

directive1中的ng-repeat属性创建了一个独立的范围。这意味着它不识别表单[bar.id],因为表单属性不是ng-repeat创建的作用域的一部分。因此,$ parent将查找父作用域以查找表单属性。

然而,虽然$ parent确实解决了这个问题,但它被认为是一种不良的做法&#39;在很多人的角度。通常所说的短语是“如果你没有点,那你就错了”#39;而不是使用$ parent,你应该创建一个表单子项(例如.foo,就像你在directive2中完成的那样),然后在formCtrl声明中使用forms.foo [bar.id]。

我们当时留下的是:

<directive1 
    model="model1"
    ng-repeat="bar in bars"
    formCtrl="forms.foo[bar.id]">
</directive1>

有关更多信息,请阅读https://github.com/angular/angular.js/wiki/Understanding-Scopes

上的原型继承