ui-router的預先載入 resolve
取得資料後,如何注入控制器?
備註:
在$state
中,我透過controllerUrl
引入控制器檔案。
我的ui-router版本為0.4.2
。
路由代碼 ↓
$stateProvider.state('dashboard', {
url: '/dashboard',
templateUrl: 'views/dashboard/index.html',
resolve: {
getList: function ($stateParams, $NetRequest){
var options = {type: 'charts'};
$NetRequest.post(options).then(function($ref){
return $ref.data;
});
}
},
controllerUrl: 'views/dashboard/index',
controller: 'DashboardController',
controllerAs: 'vm'
});
服務代碼 ↓
service.post = function($options){
var deferred = $q.defer();
// 省略请求函数...
return deferred.promise;
};
這時候如果直接在控制器中註入 getList
,結果為undefined
。
我看官方文件介紹,有個$inject
的參數,可惜沒有實例,我不清楚該如何使用。
仅有的幸福2017-05-15 17:13:59
問題解決了,其實方法很簡單 - -
$stateProvider.state('dashboard', {
url: '/dashboard',
templateUrl: 'views/dashboard/index.html',
resolve: {
getList: function ($stateParams, $NetRequest){
var options = {type: 'charts'};
return $NetRequest.post(options);
// 因为 $NetRequest.post 已经返回了结果
}
},
controllerUrl: 'views/dashboard/index',
controller: 'DashboardController',
controllerAs: 'vm'
});