如何将服务注入AngularJS'的UI路由器templateUrl函数
How to inject a service into AngularJS's UI-Router templateUrl function?
我正在尝试让AngularJS的UI路由器接收定义的状态(即"项目"),如果没有匹配,则默认为"根"状态。"根"状态应使用远程API(Firebase)进行检查,并根据结果加载适当的视图。
下面的例子不能满足这两个要求:
1) "http://website.com/project"与"根"状态匹配,而不是(以前定义的)"项目"状态。
2) "fbutil"未在"templateUrl"函数中定义,因此无法注入。
请帮我解决这些问题。
angular.module('app')
.config(['$stateProvider', '$urlRouterProvider',
function($stateProvider, $urlRouterProvider) {
$stateProvider
.state('project', {
url: '/project',
views: {
'mainView': {
controller: 'ProjectCtrl as project',
templateUrl: '/views/project.html'
}
}
})
.state('root', {
url: '/:id',
views: {
'mainView': {
templateUrl: function($stateParams, fbutil) {
var ref = fbutil.ref('user_data', id);
ref.once('value', function(dataSnapshot) {
return '/views/' + dataSnapshot.$val() +'.html';
}, function(error) {
return '/views/root.html';
});
}
}
}
})
}
]);
我们不能在这里使用templateUrl
-如文档中所述:
templateUrl(可选)
如果templateUrl是一个函数,则将使用以下参数调用它:
{array.}-通过应用当前状态从当前$location.path()中提取的状态参数
templateUrl中的参数是固定的。
因此,我们必须使用templateProvider
templateProvider(可选)
功能
返回HTML内容字符串的提供程序函数。
templateProvider:
function(MyTemplateService, params) {
return MyTemplateService.getTemplate(params.pageId);
}
检查:
- Angular UI Router:根据父解析对象决定子状态模板
- Angular和UI路由器,如何设置动态模板URL
- 在AngularJs中使用UI路由器更改导航菜单
相关文章:
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- AngularJS UI路由器不能像ng路由器那样工作
- AngularJS ui路由器html5模式中断路由
- EJS中的Angularjs-Ui路由器参数
- 使用AngularJS中的UI路由器将状态重定向到默认子状态
- 如何在ui路由器angularjs中只更改子ui视图,同时保持父视图不变
- 在UI路由器中以抽象状态填充常见视图
- angularjs中带有ui路由器的嵌套视图
- 当需要身份验证时,ui路由器不会重定向
- Ui路由器:获取控制器中视图的名称
- 在Angular ui路由器中,如何将事件从一个视图发送到另一个视图
- 带有嵌套状态的Angular ui路由器和后退按钮
- 如何加载嵌套3个状态的UI路由器UI视图模板
- Angular ui路由器中的绝对名称
- Ui路由器未显示嵌套的子内容
- ui路由器的惰性加载状态
- 访问url[材质Ui+选项卡]时,Angular Ui路由器未加载视图
- AngularJS UI路由器未进入默认状态
- Angular UI路由器-检查父状态
- 状态更改期间角度UI路由器中的嵌套视图滞后