让我举一个示例代码来更好地解释.Below是代码:
$routeProvider
.when("/b/:param",{
templateUrl:"main.html"
controller:"MainCtrl"
})
.when("/c/:param",{
templateUrl:"main.html"
});
现在从上面的代码可以看出,对于一个路由,我已经指定了要分配给视图的控制器,而另一个路径我没有添加控制器属性,所以对于该路由,不会有任何路由在页面上分配的控制器。
现在我的问题:
当我没有在路由中指定控制器属性时,还有其他方法可以为该路由分配控制器 动态吗
我已经浏览了一些与此相关的SO页面,其中一个是 - > dynamically loading the controller in angularjs $routeProvider
现在我已尝试过上述帖子中的一些解决方案,但对我来说无效。如果有任何解决方案,请告诉我有关如何实施它们的更多信息。
在页面内设置控制器或使用ui-router的解决方案并不是我想要的解决方案类型。所以请不要给出这样的答案。
我尝试使用$ controllerProvider&提供的一些功能来设置控制器。 $ controller,$ routeProvider& $ route但是没有成功。我仍然不确定是否使用它们我可以完成任务,如果他们这样做,请回答如何使用它们。
如果问题仍然不明确,请在此问题下面添加评论。谢谢。
答案 0 :(得分:1)
Apparently,它是ngView
指令(其中之一),它负责为相关控制器提供路由。它看起来像补丁的好地方。 ngView
指令的计数从1到2随时间变化,目标是最后一个。
app.decorator('ngViewDirective', function ($delegate, $route, $injector) {
var ngViewHelper = $delegate[$delegate.length - 1];
var compile_ = ngViewHelper.compile || function () {};
var link_ = ngViewHelper.link;
var link = function () {
var current = $route.current;
if (current.controllerProvider) {
current.controller = $injector.invoke(current.controllerProvider);
}
link_.apply(null, arguments);
}
ngViewHelper.compile = function () {
compile_.apply(ngViewHelper, arguments);
return link;
};
return $delegate;
});
它为路线提供controllerProvider
参数,类似于the one from ui-router(对不起)。
controllerProvider
基本上是一个使用依赖注入的函数($route
和$routeParams
肯定会受到欢迎)并将控制器作为字符串,构造函数或无控制器返回根本(undefined
)。
...
.when("/:id", {
controllerProvider: function ($routeParams) {
var controller;
if ($routeParams.id == 'foo')
controller = 'FooController';
else if ($routeParams.id == 'bar')
controller = function ($scope) { ... };
return controller;
}
});