angular-ui router - 将templateProvider中的内容转换为html和控制器

时间:2016-04-27 21:51:26

标签: angularjs angular-ui-router

我有一个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

1 个答案:

答案 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
 };
});