我试图弄清楚如何应用$ digest()或$ apply()来更新绑定。
我已经在其他线程上做了一些阅读,我认为这个概念是有道理的。但是,我无法将其应用于我的特定背景。这可能意味着我迄今为止的做法存在缺陷......
以下是我的情况:
这是我的MainController:
app.controller('MainController', function ($scope, $timeout, schoolService, teachersService) {
var self = this;
self.teachers = teachersService.teachers;
self.schoolSelected = function () {
setTimeout(function () {
teachersService.goGetTeachers($scope.sessionKey);
console.log(self.teachers);
$scope.$apply();
}, 5);
};
}
当触发schoolSelected时,它会执行teachersService。返回的数据记录到控制台。我没有收到任何错误。
但是,它不会更新self.teachers。当console.log(self.teacher)在schoolSelected函数中运行时,它返回" undefined。"
我认为这是同步性问题,并且在服务完成之前,console.log(self.teacher)和$ scope。$ apply()都在运行。
答案 0 :(得分:0)
除非数据绑定到$ rootScope,否则AngularJS不会将控制器范围数据保留在多个路由中。在您的情况下,您可以使用服务并在所有路径中保留数据。请查看以下代码以获得理解
<div ng-app="myApp">
<div ng-controller="myCtrl">
Value of foo property : {{data.foo}}
</div>
<div ng-view></div>
</div>
angular.module('myApp', ['ngRoute']).config(function ($routeProvider) {
$routeProvider.when('/', {
template: '<h1>Data</h1><a href="#/data">Data View</a>',
})
.when('/data', {
template: '<h2>Data</h2><input type="text" ng-model="data.foo" />' +
'<br /><a href="#/">Back</a>',
controller: 'dataCtrl'
})
.otherwise({
redirectTo: '/'
});
}).factory('mySharedData', function() {
return {
shareData: {
foo: 'foo',
bar: 'bar'
}
}
}).controller('myCtrl', ['$scope', 'mySharedData', function($scope, mySharedData) {
$scope.data = mySharedData.shareData;
}
]);