ats*_*uab 2 javascript controllers angularjs angular-ui-router
我试图加载一个基于stateparam的控制器,使其可重用
.state("dashboard.item.detail", {
url: "/detailId/:detailId/detailName/:detailName",
views: {
'main@': {
templateUrl: function ($stateParams){
//move this to a util function later
var tempName = unescape($stateParams.detailName);
tempName = tempName.replace(/\s/g, "-");
return '../partials/slides/' + tempName + '.html';
},
resolve: {
DetailData: ['DetailService', function(DetailService){
return DetailService.getDetails();
}]
},
controller: function ($stateParams) {
console.log( $stateParams.detailName + 'Ctrl');
return $stateParams.detailName + 'Ctrl';
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
调节器
.controller('NemtCtrl', ['$scope', '$rootScope', 'DetailData', function ($scope, $rootScope, detailData) {
console.log(detailData);
}]);
Run Code Online (Sandbox Code Playgroud)
如果我删除该功能并且只是使用(控制台将记录detailData),控制器将工作
controller: 'NemtCtrl'
Run Code Online (Sandbox Code Playgroud)
但如果我这样做,将不起作用:
controller: function ($stateParams) {
return 'NemtCtrl';
}
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?有一个更好的方法吗?
这里发生的是当你写这个:
controller: 'NemtCtrl'
Run Code Online (Sandbox Code Playgroud)
你告诉angular获得名为'NemtCtrl'的控制器.但是当你另一方面写下这个:
controller:
function ($stateParams) {
return 'NemtCtrl';
}
Run Code Online (Sandbox Code Playgroud)
你正在为那个州定义一个控制器.
更新
根据ui-router文档,方法如下:
$stateProvider.state('contacts', {
template: ...,
controllerProvider: function($stateParams) {
var ctrlName = $stateParams.type + "Controller";
return ctrlName;
}
})
Run Code Online (Sandbox Code Playgroud)
你可以在这里阅读更多相关信息
更新2
对于你的情况,它将是这样的:
.state("dashboard.item.detail", {
url: "/detailId/:detailId/detailName/:detailName",
views: {
'main@': {
templateUrl:
function ($stateParams){
//move this to a util function later
var tempName = unescape($stateParams.detailName);
tempName = tempName.replace(/\s/g, "-");
return '../partials/slides/' + tempName + '.html';
},
resolve: {
DetailData: ['DetailService',
function(DetailService){
return DetailService.getDetails();
}]
},
controllerProvider: //Change to controllerProvider instead of controller
function ($stateParams) {
//console.log( $stateParams.detailName + 'Ctrl');
return $stateParams.detailName + 'Ctrl';
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1838 次 |
| 最近记录: |