AngularJS - 父范围未更新

时间:2014-01-24 17:26:39

标签: angularjs angularjs-scope

我将尝试用示例解释问题。示例是简化的,所以它不是很合乎逻辑,但无论如何......

假设我有这样的观点

<div ng-app="TestApp" ng-controller="MyController">
    <button ng-add-item="items">Add Item</button>
    <ul>
        <li ng-repeat="item in items">{{item.name}} <button ng-change-item="item">Change item</button></li>
    </ul>
</div>

我有两个指令:

1)ngAddItem - 添加虚拟项目(点击后)

2)ngUpdateItem - 更改项目(点击后)

问题是1)效果很好,但第二 - 不是..

http://jsfiddle.net/pbmnL/2/

P.S。我知道在这个例子中我可以使用ng-click和许多其他东西。这只是简化的例子。

感谢您的帮助!..

更新:如果我只更改名称属性一切正常! http://jsfiddle.net/pbmnL/4/

但在实际例子中,我仍然需要更改整个对象..

2 个答案:

答案 0 :(得分:0)

这样做:

$element.bind('click', function () {
    $scope.$parent.item.name = 'changed name';
    $scope.$apply();
});

答案 1 :(得分:0)

您的代码无效,因为这行:

_item = _changed_item;

您只需将本地变量_item指向另一个对象,但不要更新列表中的项目。

作为一种解决方案,您可以使用angular.copy - 它将一个对象的所有属性替换为另一个对象的属性。

angular.copy(_changed_item, _item);

这是jsfiddle that works