gpt4 book ai didi

javascript - 使用 Angular ui-router 基于状态参数的负载 Controller

转载 作者:行者123 更新时间:2023-12-02 06:58:32 24 4
gpt4 key购买 nike

我正在尝试加载基于状态参数的 Controller 以使其可重用

.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';
}
}
}
})

Controller

    .controller('NemtCtrl', ['$scope', '$rootScope', 'DetailData', function ($scope, $rootScope, detailData) {
console.log(detailData);
}]);

如果我删除该功能并仅使用(控制台将记录 detailData), Controller 将工作

controller: 'NemtCtrl'

但如果我这样做将无法工作:

controller: function ($stateParams) {
return 'NemtCtrl';
}

我在这里做错了什么?有更好的方法吗?

最佳答案

这里发生的事情是当你这样写的时候:

controller: 'NemtCtrl'

您告诉 Angular 获取名为“NemtCtrl”的 Controller 。但另一方面,当你这样写时:

controller: 
function ($stateParams) {
return 'NemtCtrl';
}

您正在为该状态定义一个 Controller 。

更新

根据 ui-router 文档,方法如下:

$stateProvider.state('contacts', {
template: ...,
controllerProvider: function($stateParams) {
var ctrlName = $stateParams.type + "Controller";
return ctrlName;
}
})

您可以阅读更多相关信息 here

更新 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';
}
}

}

})

关于javascript - 使用 Angular ui-router 基于状态参数的负载 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26413076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com