我需要将路由参数传递给响应模板的服务器,因此我尝试每隔几篇文章/其他堆栈溢出文档使用templateProvider
。
我没有遇到任何JavaScript错误,但是以下templateProvider
方法甚至从未执行过。如果未注释templateUrl
属性,则此路由可以正常工作。
$stateProvider
.state('org.contacts.add', {
url: '/add',
views: {
'org@': {
// templateUrl: '/templates/issues/add',
controller: 'ContactsAddController',
templateProvider: function($route, $templateCache, $http) {
var url = '/templates/' + $route.current.params.org + '/contacts/add';
$http.get(url, {cache: $templateCache}).then(function(html){
return html;
});
}]
}
}
})
经过一些实验,看来
$route
引起了麻烦。删除并使用$stateParams
至少会触发此代码/控制器。但是,尽管我看到了ajax调用触发和正确的html响应,但它从未加载到视图中。
templateProvider: function ($stateParams, $http, $templateCache) {
var url = '/templates/contacts/add';
$http.get(url, {cache: $templateCache}).then(function(html){
return html;
});
}
最佳答案
我猜您需要返回一个$promise
才能正常工作。查看UI-Router wiki上使用的示例:
$stateProvider.state('contacts', {
templateProvider: function ($timeout, $stateParams) {
return $timeout(function () {
return '<h1>' + $stateParams.contactId + '</h1>'
}, 100);
}
})
请注意以
return $timeout(...
开头的行。您是否尝试过返回通过执行$promise
创建的$http.get()
?