Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何为路由动态设置控制器?_Javascript_Angularjs_Controller_Routes - Fatal编程技术网

Javascript 如何为路由动态设置控制器?

Javascript 如何为路由动态设置控制器?,javascript,angularjs,controller,routes,Javascript,Angularjs,Controller,Routes,让我给出一个示例代码,以便更好地解释。下面是代码: $routeProvider .when("/b/:param",{ templateUrl:"main.html" controller:"MainCtrl" }) .when("/c/:param",{ templateUrl:"main.html" }); 现在,从上面的代码可以看到,对于一个路由,我指定了要分配给视图的控制器,而对于另一个路由,我没有添加控制器属性,因此对于该路由,页面上不会分配

让我给出一个示例代码,以便更好地解释。下面是代码:

$routeProvider
  .when("/b/:param",{
    templateUrl:"main.html"
    controller:"MainCtrl"
  })
  .when("/c/:param",{
    templateUrl:"main.html"
  });
现在,从上面的代码可以看到,对于一个路由,我指定了要分配给视图的控制器,而对于另一个路由,我没有添加控制器属性,因此对于该路由,页面上不会分配任何控制器

现在我的问题是: 当我没有在路由中指定控制器属性时,是否有其他方法可以为该路由分配控制器 动态?

我试过的
  • 我已经浏览了一些与此相关的SO页面,其中一个是->

    现在,我已经尝试了上面帖子中的一些解决方案,但这些解决方案对我不起作用。如果它们中的任何一个有效,请给我更多关于如何实现它们的信息

    像在页面内设置控制器或使用ui路由器这样的解决方案不是我正在寻找的解决方案。所以请不要给出这样的答案

  • 我尝试使用$controllerProvider&$controller、$routeProvider&$route提供的一些功能设置controller,但没有成功。我仍然不确定是否可以使用它们。如果可以,请回答如何使用它们

如果问题仍然不清楚,请在此问题下方添加注释。谢谢。

,负责向相关管制员提供路线的是
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
参数,类似于(很抱歉)

controllerProvider
基本上是一个利用依赖注入的函数(
$route
$routeParams
在这里肯定很受欢迎),并以字符串、构造函数或根本不使用控制器的形式返回控制器(
未定义的


如果您提供了其他解决方案不适合您的要点原因,将会有所帮助。将防止走同一条路,或可能暴露使其工作的方法。还有,你说的是多少个动态控制器?如果只是使用
templateURL:function
的几个问题,我会简单地提到我尝试过的一些事情,以便其他查看我的问题的人会得到帮助,找到或记住我尝试过的问题是否有任何相关的解决方案。我不认为完全提及我尝试过的每一个问题都是可能的,或者是一个很好的解决方法问一个问题。但提供一些约束条件会有帮助。我的意思是说,不在路由配置中指定它。我想,如果我说我想要某个控制器,那么当某个特定路由即将发生时,无论我想要设置哪个控制器,都会很清楚。关于我提到的帖子,我发现没有答案这个问题的解决方案,但他们给了我一些想法,我尝试了,但失败了。你能解释一下下面这行是什么意思吗:ngView指令计数随时间从1变为2,目标是1.4中的最后一个,只有第二个应该装饰。在1.2中有。好的。谢谢你的回复
  ...
  .when("/:id", {
    controllerProvider: function ($routeParams) {
      var controller;
      if ($routeParams.id == 'foo')
        controller = 'FooController';
      else if ($routeParams.id == 'bar')
        controller = function ($scope) { ... };
      return controller;
    }
  });