【发布时间】:2017-12-11 23:12:05
【问题描述】:
我有两个控制器,一个嵌套在另一个控制器中。 ParentController 有一个我在 ChildController 中使用的对象,因为它可以直接在 child 中使用。现在,在孩子中,我正在调用 $http 服务,然后更新这个对象。我认为它应该更新视图。
我尝试调用 $scope.$apply() 承诺成功函数,但我想我不太明白如何使用这个函数。如何在不刷新页面的情况下更新 DOM?
我还阅读了有关在 $scope.$apply() 中调用 $http 服务的信息。该怎么做?
$scope.addVideo = function (data) {
console.log('scope tutorial', tutorial);
$http.post('/tutorials/' + tutorial.id + '/videos/', $scope.formData)
.then((response) => {
$window.tutorial.videos.push(response.data.video);
window.location = '/tutorials' + tutorial.id;
})
}
现在,在 UI 中,我使用的是 TutorialsController,它负责添加教程。我的意思是它是一种形式,它只适用于形式。然后是本教程中显示视频的 VideoController。
<div ng-controller="TutorialsController">
// add video in this tutorial logic
<ol ng-repeat="vid in tutorial.videos" ng-controller="VideoController">
<li>{{vid.title}}</li><button>Delete</button>
</ol>
</div>
当父级添加视频时,我想更新子级,当子级 VideoController 使用删除按钮删除视频时,我想将其从父级范围中删除。
【问题讨论】:
-
请记住,在大多数地方(控制器、服务),处理事件的指令已经为您调用了 $apply。只有在实现自定义事件回调或使用第三方库回调时,才需要显式调用 $apply。
-
当询问由您的代码引起的问题时,如果您提供人们可以用来重现问题的代码,您将获得更好的答案。见How to create a Minimal, Complete, and Verifiable example。
-
很大程度上取决于您对“更新对象”使用的方法
-
没有更多信息,tbis 的问题太宽泛了。两个控制器是如何设置的?
ng-controller还是作为 AngularJS 组件的控制器?他们是否使用controllerAs语法来实现?涉及的作用域是隔离作用域还是继承作用域? -
我很抱歉这个问题。我已经用一些 sn-p 代码更新了这个问题。