Javascript AngularJS,使用不同模板但相同控制器的多条路线如何?
我正在调查我是否能得到标题上写的东西。 这是我的想法 让我们假设我有以下路线:Javascript AngularJS,使用不同模板但相同控制器的多条路线如何?,javascript,angularjs,routes,angular-routing,Javascript,Angularjs,Routes,Angular Routing,我正在调查我是否能得到标题上写的东西。 这是我的想法 让我们假设我有以下路线: .when('/', { templateUrl : 'partials/homepage.html', }) .when('/test', { templateUrl : 'partials/test.html', }) .when('/page/:pageID', { templateUrl : 'partials/page.html',
.when('/', {
templateUrl : 'partials/homepage.html',
})
.when('/test', {
templateUrl : 'partials/test.html',
})
.when('/page/:pageID', {
templateUrl : 'partials/page.html',
})
.when('/page/single/:pageID', {
templateUrl : 'partials/page-single.html',
})
直到现在,我才有机会在路由中添加templateUrl作为控制器的详细信息,并且一切正常
现在,应用程序已更改,只有一个控制器包含所有需要的信息,并且必须保留一个控制器。路线是这样的:
.when('/:templateName/:pageID', {
controller: 'myCtrl'
})
我可以通过获取templateName参数从控制器设置模板id吗?如果是这样,那么最后一个路由示例/page/single/:pageID如何?我怎么知道路线上还有第二种选择
我可以使用templateName参数并使用$routeChangeSuccess方法查看它的变化,但是我找不到任何方法来动态设置模板
有什么想法吗?一个解决方案可以是:
angular.module('myapp', []).
config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/:templateName/:pageId', {
templateUrl: function(urlattr){
return '/pages/' + urlattr.templateName + '.html';
},
controller: 'YourCtrl'
});
}
]);
从AngularJs 1.3文档中:
templateUrl
–{string
|function()
}–返回ngView应使用的html模板路径的路径或函数
如果templateUrl是一个函数,则将使用以下参数调用它:
数组。
-通过应用当前路由,从当前$location.path()
提取路由参数
我会将您的
单例逻辑从控制器移动到服务。由于您没有提供太多代码,下面是一个示例,让您了解它是如何工作的
app.config(函数($routeProvider){
$routeProvider
。当(“/”{
templateUrl:“partials/homepage.html”,
控制器:“SingleController”
})
。当(“/test”{
templateUrl:'partials/test.html',
控制器:“SingleController”
})
.when(“/page/:pageId”{
templateUrl:'partials/page.html',
控制器:“SingleController”
});
});
app.provider('appState',function()){
这个。$get=[function(){
返回{
数据:{}
};
}];
});
app.controller('SingleController',函数($scope,appState){
$scope.data=appState.data;
});代码>为什么要避免为您所在的州使用服务?与你的要求相反。嗯,我不确定,我只是想找到正确的方法。我有一个bug,一个控制器有很多范围和数据。我在想一种简单的方法来读取templateName参数,并用模板的路径更新一个作用域,然后只包含它,但我不确定这样做是否正确或安全。当然,这是可能的(请参阅下面的答案,尽管它没有保留您现有的控制器)。但是我会尝试从控制器中删除所有的singleton
类逻辑,并将其移动到服务中。你能提供一个例子吗?我刚刚看到了编辑,谢谢。我试试看,很快就会回来:)