我正在尝试重构一个一直使用 Ajax 获取一些服务器数据的应用程序,然后将其附加到$rootScope
控制器和服务以在引导应用程序之前获取,并且我一直在尝试使用 Promise 这样做$q
plnkr:http ://plnkr.co/edit/22yQUlyE9nbQ0WVjxWxY
在那个 plnkr 中,我试图让服务返回一些数据供一些控制器使用。
app.service('data', function($q, $window, $timeout) {
var promise = $q.defer();
promise.promise.foo = 'Dang!';
$timeout(function() {
console.log('resolve promise');
promise.resolve({
foo: 'bar',
baz: 'zot'
});
}, 1000);
console.log('return promise');
return promise.promise
});
我正在像这样使用 $routeProvider 的解析属性
app.config(function($routeProvider) {
$routeProvider.when('/', {
controller: 'MainController',
templateUrl: 'data.html',
resolve: {
data: 'data'
}
});
});
但是,当我尝试将已解决的承诺的“foo”属性分配给我的一个控制器中的 $scope 时,它就出现了错误。
app.controller('MainController', function($scope, data) {
$scope.main = data.foo;
});
app.controller('Controller1', function($scope, data) {
$scope.controller1 = data;
});
当promise 解决并且实际 promise 对象$scope
的属性结束时,不会更新,如http://plnkr.co/edit/22yQUlyE9nbQ0WVjxWxY?p=preview所示foo
$scope
那么,我是否通过将 promise 的属性分配给 来做我绝对不应该在这里做的事情$scope
?我的印象是路由的 resolve-property 意味着在 promise 解决之前不应该初始化任何东西。