2016-01-20 62 views
0

可以使用兩種不同的控制器使用roteProvider使用兩個控制器的一個視圖中使用routeprovider angularjs

一個視圖

是這樣的:

angular.module('myApp', 'ui.router', 'ui.bootstrap', 'indexedDB', 'ngOrderObjectBy']).config(function ($stateProvider, $urlRouterProvider, $indexedDBProvider) { 

$urlRouterProvider.otherwise("/student"); 

$stateProvider 
    .state('studentId', { 
     url: "/student/:studentId/:classId", 
     templateUrl: "views/Student/Student.html", 
      controller:'StudentCtrl' 
    }) 
    .state('modules', { 
     url: "/modules", 
     templateUrl: "views/modules/modules.html", 
      controller:'studentCtrl', 
      controller:'modulesCtrl'   
}); 
+0

來訪問內部變量,不像那樣,modulesCtrl是將要使用的變量,因爲它最後被聲明,所以你可以使用盡可能多的控制器,但是據我所知,只有一個要在路由中聲明,爲了使用更多的控制器,直接使用ng-controller指令。 http://stackoverflow.com/questions/25061540/can-i-pass-multiple-controllers-in-routeprovider-when-in-angularjs – thsorens

回答

0

你無法定義這種方式兩個控制器,你傳遞給.state的第二個參數是一個JavaScript對象,它的鍵是唯一的。 嘗試打開瀏覽器控制檯,並做到這一點:

> var obj = {"view":"a", "controller":"CA", "controller":"CB"} 
> obj 
< Object {view: "a", controller: "CB"} 

你看,只有最後一個鍵/值將被保存。

回到問題,我想你可以在模板中應用第二個控制器。 在配置你將有:

$stateProvider 
    .state('studentId', { 
     ... 
    }) 
    .state('modules', { 
     url: "/modules", 
     templateUrl: "views/modules/modules.html", 
     controller:'modulesCtrl'   
}); 

而且在模板:

<div class="modules"> 
    ... 
    <div class="students" ng-controller="studentCtrl"> 
     ... 
    </div> 
    ... 
</div> 
0

可以使這兩個州的一個公共父抽象狀態的兒童。唯一的負面影響是抽象狀態必須有一個URL,它會出現。 URL可以是簡單的(例如'/ a')或描述這兩個模塊的東西。

爲什麼共享控制器的視圖?這些功能是否在控制器中實現?目前常用的Angular編碼標準適用於將存儲在工廠/服務中的函數和對象映射到視圖的精簡控制器。據推測,你的每個州都有一個獨特的控制器,將一個或多個工廠的功能映射到視圖。那麼控制器將只包含對視圖中實際使用的變量或函數的映射。

不過,如果你大部分的可以,如果你單獨定義功能的控制器添加到控制器:

angular.module('MyApp', []) 

.controller('Ctrl1', Ctrl1) 
    .controller('Ctrl2', Ctrl2) 
    .controller('Ctrl3', Ctrl3); 

function Ctrl1() { 
    var vm = this; 
    vm.name = "Ctrl1name"; 
    vm.fn = function() { 
    console.log("I am controller Ctl1") 
    }; 
} 

function Ctrl2() { 
    var vm = this; 
    vm.name = "Ctrl2name"; 
    vm.fn = function() { 
    console.log("I am controller Ctl2") 
    }; 
} 

function Ctrl3() { 
    var vm = this; 
    vm.ct1 = new Ctrl1(); 
    vm.ct2 = new Ctrl2(); 

} 

正是在這種Codepen:http://codepen.io/StretchKids/pen/gPoERN/?editors=0010

正如你所看到的,CTRL3的函數變量設置爲新版本的Ctrl1和Ctrl2的函數。通過變量

相關問題