【问题标题】:How to keep isolate scopes in sync with parent scope variable?如何使隔离范围与父范围变量保持同步?
【发布时间】:2014-03-23 20:06:40
【问题描述】:

我有一个控制器:

MyController
- $scope.value = 5
- $scope.list = [
  {item: Apple, cost: 5},
  {item: Bannana, cost: 2}
]

在我的 index.html 中,我有一个 ng-repeat:

<div ng-controller="MyController">
                        <mydirective ng-repeat="item in list" value="value"></mydirective>
                    </div> 

在我的指令中,我有一个隔离范围:

{
value:"=" 
}

在指令的链接函数中,我绑定了一个事件:

- Onclick, increment scope.value by "1"

问题在于,尽管有“=”,但从 ng-repeat 生成的 2 个指令中的每一个都只是实际 MyController“值”变量的“副本”。如何使它们链接在一起,以便当我单击时,myController 的 $scope.value 得到更新并且所有指令“scope.value”都会匹配它?或者这不可能?

我希望能够从所有指令中观察 MyController 的 $scope.value,以便每个指令都可以根据“值”做一些事情。

【问题讨论】:

    标签: angularjs


    【解决方案1】:

    我想您遇到了作用域继承原始类型的问题。 尝试改用对象:

    MyController
    - $scope.valueObject = { value: 5 }
    then increment valueObject.value by "1"
    

    您的 ng-repeat 的每个范围都继承自控制器范围。 如果您继承了像“值”这样的原始类型,那么在子范围内更改它只会影响该子级,因为它会影响父级。 如果您改为继承一个对象,那么更改该值将影响继承的对象 = 该值对于所有 ng-repeat 范围都是相同的。

    【讨论】:

    • 如何为指令形成监视语句以监视该“值”?似乎 scope.$watch('valueObject.value',...) 不起作用。我想让它在该值发生变化时,所有指令“得到它”并做一些事情。
    • 也许你可以做一个plunker来进一步阐述你的问题? plnkr.co 有 Angular JS 模板可以轻松创建运行示例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-01
    • 1970-01-01
    相关资源
    最近更新 更多