gpt4 book ai didi

javascript - AngularJs:具有动态 Controller 名称的 $routeProvider 将不会加载

转载 作者:行者123 更新时间:2023-12-03 10:50:21 25 4
gpt4 key购买 nike

AngularJs 文档说,在配置 $routeProvider 时,您可以在路由对象中为 Controller 和 templateUrl 指定字符串或函数,但是在使用函数根据 $ 动态确定 Controller 时遇到问题位置参数。我有以下路由配置:

$routeProvider
.when( '/workspace/:workspaceId/product/:productId/item/:itemType/:itemId/edit', {
templateUrl: function ( param ) {
switch ( param.itemType ) {
case 'topic':
return 'topic.tpl.html';
case 'course':
return 'course.tpl.html';
}
throw new Error( "Unknown product item type '" + param.itemType + "'" );
},
controller: function ( param ) {
switch ( param.itemType ) {
case 'topic':
return 'TopicController';
case 'course':
return 'CourseController';
}
throw new Error( "Unknown product item type '" + param.itemType + "'" );
}
} );

加载应用程序时出现以下错误:

Error: [$injector:unpr] Unknown provider: paramProvider <- param

我在这里遗漏了任何明显的东西吗?将 Controller 切换为使用字符串而不是函数可以解决此问题。

看起来有些人以前遇到过这个问题(例如 here ),但我很困惑为什么这不起作用,正如文档建议的那样。

任何帮助将不胜感激!

约瑟夫。

最佳答案

我认为问题的一部分可能是,当您向 Controller 提供函数而不是字符串时,它不是一个旨在返回 Controller 名称的函数,而是一个旨在充当 Controller 的函数。

看一下以下内容 - 路线/动态 Controller 行为似乎有效。我正在使用 $controller 按名称实例化 Controller 。因此,在这种情况下,我实际上并没有动态返回不同的 Controller ,而是在我提供给 $routeProvider 的匿名 Controller 中实例化一个新 Controller 。

这是否是实现预期最终结果的最佳方式可能是另一回事。 ;) angular-ui/ui-router 项目非常受欢迎。

angular.module('myApp', ['ngRoute'])
.config(function($routeProvider) {
$routeProvider
.when('/workspace/:workspaceId/product/:productId/item/:itemType/:itemId/edit', {
template: '<h1>{{title}}</h1><p>{{test}}</p>',
controller: function($scope, $routeParams, $controller) {
switch ($routeParams.itemType) {
case 'topic':
$controller('TopicController', {
$scope: $scope
});
break;
case 'course':
$controller('CourseController', {
$scope: $scope
});
break;
}
}
})
.when('/', {
template: '<h1>Home</h1><p>{{test}}</p>',
controller: 'home'
});
}).controller('home', function($scope) {
$scope.test = 'Hello world.';
}).controller('TopicController', function($scope) {
$scope.title = "Topic";
$scope.test = 'Success!';
}).controller('CourseController', function($scope) {
$scope.title = "Course";
$scope.test = 'Success again!';
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.27/angular-route.min.js"></script>
<div ng-app="myApp">
<a href="#/workspace/1/product/1/item/topic/1/edit">Topic</a>
<a href="#/workspace/1/product/1/item/course/1/edit">Course</a>
<div ng-view />
</div>

关于javascript - AngularJs:具有动态 Controller 名称的 $routeProvider 将不会加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28442865/

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