AngularJs数组未绑定到模板

时间:2016-06-01 13:26:50

标签: html angularjs binding controller

我有一个名为 dataController 的控制器,两个名为 dataHttpServices dataLocalServices 的服务以及一个html模板,一些指令。

在我的html模板中,我有两个不同的选项卡使用相同的控制器,并在我的控制器中从两个不同的位置添加项目列表。

在调试模式下,我看到数据正确更改但数据绑定无法正常工作。

我不知道我的错误是什么,请帮忙。在代码中;

这是Html;

<div 
    class="metadataSelect"
    layout="column" 
    ng-model="selectedItems" 
    ng-show="selectedItems.length > 0">                                 
    <div layout="row" ng-repeat="item in selectedItems">
        {{item.Name}}
    </div>
</div>

这是控制器;

$scope.addSelectedItem = function (selectedItem) {
    var found = false;
    var self = this;

    dataLocalService.addSelectedItem(selectedItem);
    $scope.selectedItems = dataLocalService.getSelectedItems();
};

这是服务;

this.selectedItems = [];

this.addSelectedItem = function (item) {
    this.selectedItems.push(item);
};

this.getSelectedItems = function () {
    return this.selectedItems;
};

我通过 ng-click 在两个不同按钮的点击事件中从范围调用 addSelectedItem

如果我首先通过单击第一个按钮添加项目并单击第二个按钮(首先单击第一个按钮),该按钮将数组绑定到div正确。

但是当我在单击第一个按钮之前单击第二个按钮添加项目时,该数组不会绑定到div。

通过单击第二个按钮将一些项添加到数组后,当我单击第一个按钮时,将所有元素绑定到div。例如,三个元素一次但不绑定而不单击第一个按钮。

我的错误是什么?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我使用 $ scope。$ watch 解决了这个问题。我认为问题是它们的范围不同,因为我用 ng-controller 创建了两次控制器。这是我发现解决它的代码片段。

$scope.$watch('selectedItems', function () {
    $scope.selectedItems = $metadataLocalService.getSelectedItems();
});

这解决了我的问题。因为手表正在跟踪相关的数据变化等。