2016-04-27 81 views
0

我有一个state需要做一些逻辑,然后它返回到模板,这花了我一段时间才弄清楚,但我终于学到了templateProvider和想出了这个;angular-ui路由器 - 从templateProvider获取内容到html和控制器

.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

templateUrl应该工作。控制台中是否有任何错误?你能上传plunkr吗? –

+0

'templateUrl'可以让我进入HTML页面,但是我仍然不清楚如何将'templateProvider'的结果转换为HTML页面使用的任何控制器的'$ scope'上的有意义变量 – Ciel

+0

'templateProvider '用于动态构建动态模板。它应该返回一个字符串格式化模板(HTML的字符串表示)。 如果你想**在页面加载之前解析**一些数据,那么你应该看看wiki中的'resolve'选项:https://github.com/angular-ui/ui-router/wiki –

回答

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 
}; 
}); 
+1

是啊!这正是我需要做的。谢谢! – Ciel

+0

这就是我们在这里:) –