AngularJS在一个页面上重用相同的控制器,具有不同的配置

met*_*hai 6 javascript angularjs angularjs-directive

我想在由一个控制器的不同实例控制的页面上显示两个元素,但是我需要注册一些独特的外部信息(一个"操纵杆"获得一个识别属性集,如"player = one"而另一个获得"玩家=两个").我不确定最好的方法是将其拉下来

这是我要完成的一个通用示例:

<!-- These need to have different configurations -->
<div ng-include src="'joystick/joy.tpl.html'" 
     ng-controller="JoystickCtrl">...</div>

<div ng-include src="'joystick/joy.tpl.html'" 
     ng-controller="JoystickCtrl">...</div>
Run Code Online (Sandbox Code Playgroud)

我是不是该:

使用指令?

<div ng-include src="'joystick/joy.tpl.html'" 
     ng-controller="JoystickCtrl" player="one">...</div>
<div ng-include src="'joystick/joy.tpl.html'" 
     ng-controller="JoystickCtrl" player="two">...</div>
Run Code Online (Sandbox Code Playgroud)

使用$ injector?(fyi - 这可能是一个不正确的实现)

<div ng-controller="DualJoyCtrl">
    <div ng-include src="'joystick/joy.tpl.html'" 
         ng-controller="joyOne" player="one">...</div>
    <div ng-include src="'joystick/joy.tpl.html'" 
         ng-controller="joyTwo" player="two">...</div>
</div>

-----

.controller('DualJoyCtrl', function ($injector, JoystickCtrl, $scope, $rootScope) {
   $scope.joyOne = $injector.instantiate(JoystickCtrl, {$scope: $rootScope.$new(), player:"one"});
   $scope.joyTwo = $injector.instantiate(JoystickCtrl, {$scope: $rootScope.$new(), player:"two"});
});
Run Code Online (Sandbox Code Playgroud)

或者......不这样做?

我意识到这与另一个看似无关的堆栈帖子类似:

pac*_*age 7

编辑

由于ngController是在ngInit之前初始化的,为了让控制器中的数据一次可用,你应该使用ngInit将ngController包装在父元素中:

<div ng-init="player = 'one'">
   <div ng-controller="JoystickCtrl">
     ...
   </div>
</div>
Run Code Online (Sandbox Code Playgroud)

原始答案

我认为简单的ng-init就足够了:

<div ng-controller="JoystickCtrl" ng-init="player='one'">...</div>
<div ng-controller="JoystickCtrl" ng-init="player='two'">...</div>
Run Code Online (Sandbox Code Playgroud)