你看了
$routeProvider.when('/path',{resolve:{...}吗?它可以使诺言方法更加简洁:
在您的服务中兑现承诺:
app.service('MyService', function($http) { var myData = null; var promise = $http.get('data.json').success(function (data) { myData = data; }); return { promise:promise, setdata: function (data) { myData = data; }, doStuff: function () { return myData;//.getSomeData(); } };});
添加
resolve到您的路由配置:
app.config(function($routeProvider){ $routeProvider .when('/',{controller:'MainCtrl', template:'<div>From MyService:<pre>{{data | json}}</pre></div>', resolve:{ 'MyServiceData':function(MyService){ // MyServiceData will also be injectable in your controller, if you don't want this you could create a new promise with the $q service return MyService.promise; } }}) }):
解决所有依赖关系之前,不会实例化您的控制器:
app.controller('MainCtrl', function($scope,MyService) { console.log('Promise is now resolved: '+MyService.doStuff().data) $scope.data = MyService.doStuff();});
我在plnkr上做了一个例子:http
://plnkr.co/edit/GKg21XH0RwCMEQGUdZKH?p=preview
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)