在 $stateProvider.state 中分配多个控制器 [英] Assign multiple controller in $stateProvider.state

查看:19
本文介绍了在 $stateProvider.state 中分配多个控制器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于高级 Angular 用户来说,这可能是一个简单的问题,但我没有找到对这个问题进行很好解释的地方.

所以我正在重构我的代码,当我意识到我在一个视图中有两个控制器时,这不是问题,当控制器ACtrl"被 $stateProvider 绑定并且控制器BCtrl"被绑定在视图中时ng-控制器.但是当我尝试像这样在 $stateProvider 中分配它们时:

$stateProvider.state('a.view', {url: "/anurl",意见:{'菜单内容':{templateUrl: "anUrlToMyTemplates",控制器:'ACtrl','BCtrl'}}});

或者那个:

$stateProvider.state('a.view', {url: "/anurl",意见:{'菜单内容':{templateUrl: "anUrlToMyTemplates",控制器:'ACtrl',控制器:'BCtrl'}}});

这行不通.

我知道将控制器的内容设为一个是一种解决方案,但控制器ACtrl"也在其他地方使用,所以我必须在其他地方重复我自己.我该如何解决这个问题...

解决方案

在语法上,它不能工作.这(语法上)可以工作:

$stateProvider.state('a.view', {url: "/anurl",意见:{'菜单内容':{templateUrl: "anUrlToMyTemplates",控制器:['ACtrl','BCtrl']}}});

但是 AngularJS 通过 DOMElement 使用 ZEROONE 控制器.

您可以为您的 A 视图指定 CtrlA :

$stateProvider.state('a.view', {url: "/anurl",意见:{'菜单内容':{templateUrl: "anUrlToMyTemplates",控制器:'ACtrl'}}});

然后进入你的A视图:

<!-- 您查看的内容-->

也就是说,出于代码设计的目的,正确的方法是将两个控制器的操作合并为一个,如果它们必须控制相同的模板元素.如果他们控制模板的不同部分,请为一个部分使用一个控制器,或者为整个视图使用一个控制器,另一个用于特定部分:

<!-- 您的视图由路由提供程序中配置的 ACtrl 控制 --><div><!-- 您查看的内容,A 部分 --><div data-ng-controller="BCtrl"><!-- 您查看的内容,B 部分 -->

Probably this is an easy question for advanced angular users, but I did not find this issue somewhere well explained.

So I was restructuring my code, when I realized, I have two controllers in a view, which is not a problem, when controller 'ACtrl' is binded by the $stateProvider and controller 'BCtrl' is binded in the view by ng-controller. But when I try to assign both of them in the $stateProvider like this:

$stateProvider.state('a.view', {
    url: "/anurl",
    views: {
        'menuContent': {
            templateUrl: "anUrlToMyTemplates",
            controller: 'ACtrl', 'BCtrl'
        }
    }
}); 

or that:

$stateProvider.state('a.view', {
    url: "/anurl",
    views: {
        'menuContent': {
            templateUrl: "anUrlToMyTemplates",
            controller: 'ACtrl',
            controller: 'BCtrl'
        }
    }
});

it won't work.

I know it would be a solution to make the content of the controllers up to one, but controller 'ACtrl' is used somewhere else, too, so I would have to repeat myself somewhere else. How can I solve this...

解决方案

Syntaxically, it can't work. This (syntaxically) could work :

$stateProvider.state('a.view', {
    url: "/anurl",
    views: {
        'menuContent': {
            templateUrl: "anUrlToMyTemplates",
            controller: ['ACtrl', 'BCtrl']
        }
    }
}); 

But AngularJS use ZERO or ONE controller by DOMElement.

You can assign CtrlA for your A view :

$stateProvider.state('a.view', {
    url: "/anurl",
    views: {
        'menuContent': {
            templateUrl: "anUrlToMyTemplates",
            controller: 'ACtrl'
        }
    }
}); 

And then into your A view :

<div data-ng-controller="BCtrl">
    <!-- your view content -->
</div>

That said, for code design purpose, the correct way is to merge the actions of your two controllers in only one if they have to control the same template elements. If they control different parts of the template, use one controller for one part, or a controller for the whole view, and an other for the specific part :

<!-- your view controlled by ACtrl configured in route provider -->
<div> 
    <!-- your view content, part A -->

    <div data-ng-controller="BCtrl">
        <!-- your view content, part B -->
    </div>
</div>

这篇关于在 $stateProvider.state 中分配多个控制器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
其他开发最新文章
热门教程
热门工具
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆