修改作用域变量后,未更新作用域绑定
Scope binding is not getting updated after scope variable was modified
在提交$Modal(modalInstance)时,我正在更新范围($scope.expense)上的数组,视图绑定到对象,datatable使用"expense"作为数据。我可以看到$scope.expense在调试时正在更新,并且正在插入一个新项,但在表中和{{expense.length}}绑定中,我看不到更新。我读过很多关于这个问题的问题,插入是在有角度的一侧执行的,所以如果我理解应用''摘要是不需要的。
我试过了:
- 调用$scope$摘要''$scope$推送后的apply()(导致摘要已在进行中的错误)
- 将push封装在$scope中的函数中$apply(函数)。相同错误,摘要已在进行中
- 使用$timeout,这样推送将被推迟到下一个摘要周期-视图不会更新
上述选项均未解决问题。
视图(我确实看到了推送之前的长度,所以绑定在视图中定义正确,这就是为什么我不粘贴整个视图的原因):
<div class="row">
<div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl">
{{expenses.length}}
<div class="col-md-1" ng-controller="LiveCtrl">
<button class="btn btn-link" ng-click="openAddExpenseModal()">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Expense
</button>
</div>
</div>
</div>
控制器代码,我推到支出新项目:
modalInstance.result.then(function (newExpense) {
ExpenseService.addExpense(newExpense).then(function (id) {
console.log(id);
$scope.expenses.push(newExpense);
}, function (rejectData) {
console.log(rejectData);
});
}, function (msg) {
console.log('Modal dismissed at: ' + new Date() + 'Message - ' + msg);
});
问题是您使用控制器两次,实际上创建了两个作用域,因此创建了两组数组:
这里一次:<div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl">
第二次在这里:<div class="col-md-1" ng-controller="LiveCtrl">
因此,上面的一个显示了原始费用数组的长度,但实际上是在将费用添加到第二个控制器范围的数组中。父作用域中的原始作用域保持不变。
您需要做的是删除控制器的最后一个声明,创建:
<div class="row">
<div class="ibox-content col-lg-10 col-lg-offset-1" ng-controller="LiveCtrl">
{{expenses.length}}
<div class="col-md-1">
<button class="btn btn-link" ng-click="openAddExpenseModal()">
<span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Add Expense
</button>
</div>
</div>
</div>
相关文章:
- 对父作用域的指令更新延迟了一步
- 当我更新另一个作用域变量时,作用域变量会自动更新
- AngularJS select with ng选项不更新父作用域中的引用对象属性
- 如何更新作为属性传入的作用域变量
- 从$http.get调用更新Angular作用域变量
- 隔离未更新指令中值的作用域
- Angular.js-从指令更新父作用域
- 修改作用域变量后,未更新作用域绑定
- 角度指令的父作用域未更新UI
- 正在更新UI路由器状态更改上的父作用域
- 更新侧自调用函数中的外部作用域对象
- AngularJS:如何在指令范围的对象发生变化时更新与控制器作用域相关联的控制器作用域
- 在 AngularJS 中执行作用域函数内的服务后,范围变量不会更新
- 离子选择不会更新依赖于作用域变量的功能
- 在 $scope.$watch 中更新时,独立作用域绑定不起作用
- 作用域变量未在$Scope中更新$看
- Angular.js-视图不't在resize事件中更改作用域变量时更新
- AngularJs:将一个值传递给打开ngDialog的指令,然后将更新的值反映回根作用域
- AngularJS:指令作用域更新&单击事件
- 如何在回调函数中从另一个作用域更新变量