我有一个state
需要在返回模板之前做一些逻辑,这花了我一段时间才弄清楚,但我终于了解了templateProvider
并提出了这个问题;
.state('home.read', {
url: '/read/{id:u}',
templateProvider: ($stateParams:ng.ui.IStateParamsService, $http:ng.IHttpService, $settings:ISettings) => {
return $http({
url: String.format('{0}/api/articles/read/{1}', $settings.uri(), $stateParams['id']),
method: 'GET',
withCredentials: true
}).then((response) => {
return response.data;
});
}
})
从服务器获取我需要的数据并通过凭据等过滤它;它确保我所得到的是我所需要的。
所以现在我感到很困惑 - 我如何才能将其转移到控制器并获取适当的.html
模板以便加载,以便我可以使用它?
模板太复杂了,无法作为字符串传递。我真的需要它作为静态HTML文件存在。我尝试使用templateUrl
,但这似乎不起作用。即使它确实如此,我仍然不清楚如何将数据传送到控制器 - 特别是因为我需要将它附加到$scope
。
答案 0 :(得分:0)
不熟悉打字稿,所以我将以普通的js提供解决方案。
在配置阶段:
.config(function($stateProvider, $urlRouterProvider){
$stateProvider
.state('read', {
url: '/read/:id'
controller: 'IndexController',
resolve: {
myResolvedData: function($stateParams, $settings, $http){
return $http.get($settings.uri() + '/api/articles/read/' + $stateParams['id']);
}
}
});
});
在IndexController
:
.controller('IndexController', function($scope, ... , myResolvedData){
//Bind resolved data to scope variable. template and controller will not load before
//myResolvedData is resolved.
$scope.data = {
fromServer: myResolvedData
};
});