【发布时间】:2014-08-05 17:03:07
【问题描述】:
AngularJS 新手我有一个简单的指令、服务和控制器。我遍历指令中嵌入的控制器中的数据库中的项目列表,以呈现项目的复选框列表。从表格中,我可以更新数据库中的项目列表。同时我想用新添加的项目更新我的显示项目列表,并希望从 Angulars 双向绑定中受益,但我不知道如何......
我的指令:
angular.module('myModule').directive('menu', function (menuService) {
return {
restrict: 'E',
templateUrl: '../templates/menu.html',
controller: function () {
var me = this;
menuService.getMenuItems().then(function(data) {
me.items = data;
});
},
controllerAs: 'menu'
};
});
及对应的html:
<div ng-repeat="item in menu.items">
<div class="col-md-4" ng-if="item.menuItem">
<div class="checkbox">
<label for="{{item._id}}">
<input id="{{item._id}}" type="checkbox" name="menuItems" ng-model="menuItems[$index]" ng-true-value="{{item._id}}">
{{item.menuItem}}
</label>
</div>
</div>
</div>
我现在的问题是,如果我使用此控制器添加新项目
编辑:在我的页面上,我有两件事。 1:使用上述指令呈现的项目列表和 2:具有单个输入字段的简单表单。我输入一个新的 menuItem 并单击“保存”。这会触发下面的控制器被新的 menuItem 调用。然后将 menuItem 添加到我的数据库中的集合中,但我希望我的页面上的列表使用新添加的项目进行更新。最好不必重新加载整个页面。
$scope.insertMenuItem = function () {
$http.post('/menuItems', $scope.formData)
.success(function (data) {
$scope.items = data;
});
};
然后我的指令中的“me.items”保持不变,因此我的浏览器中的列表也是如此。
我如何“将所有内容捆绑在一起”,以便在我调用 insertMenuItem 时 my.items 会自动更新?
这并没有我希望的那么好,但我希望你明白这个意思......
提前致谢
【问题讨论】:
-
如果您使用的是
controller as,那么您需要更新this.items = data而不是$scope.items -
很抱歉,将我的控制器从 $scope.items 更改为 this.items 并没有帮助。我仍然需要重新加载我的页面才能看到新插入的项目...
-
add a new item using this controller你能解释一下吗... -
如果
insertMenuItem()在父控制器中(不是menu指令的控制器),您必须寻找一种通信方式,例如将items移动到$scope到获得范围继承或使用双向范围绑定的好处。 -
更新问题。现在清楚一点了吗?
标签: angularjs angularjs-directive angularjs-controller