2014-11-22 208 views
0

我想調用另一個控制器,給一個特定的div的名稱。Angularjs,如何從另一個控制器調用控制器

如何調用控制器cook裏面的myapp-controll控制器?

<html ng-app="myapp"> 
<body ng-controller="myapp-controll"> 

<ng-view></ng-view> 

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.2/angular.min.js"></script> 

<script type="text/javascript"> 
var myapp = angular.module('myapp', []); 

myapp.config(function($routeProvider) { 
$routeProvider 
    .when('/:acess', { 
     templateUrl : 'sources/default.html', 
     controller : 'myapp-controll' 
    }) 
}); 

myapp.controller('myapp-controll', function($scope, $routeParams) { 
     $scope.templateUrl = 'sources/'+$routeParams.acess+'.html'; 
}); 

myapp.controller('cook', function($scope, $routeParams) { 
     $scope.pagetitle = 'cook'; 
}); 
</script> 

</body> 
</html> 

回答

1

有一對夫婦的方式,一些比別人差:

  1. 您可以通過調用從myapp-controller使用$scope.$parent父範圍使用範圍繼承。這種方式非常脆弱,因爲如果在某個點處中間引入了另一個範圍,則代碼將會中斷。這是非常有可能的,通過像ng-repeat,ng-if等等。另外,Angular 2.0正在取消$ scope,所以如果你想讓你的代碼有前途的證明,我會遠離這種方法。

  2. 您可以使用事件委託,通過使用$scope.$emit發送事件信息了作用域鏈:

MYAPP控制器:

$scope.$emit("eventName", eventData); 

應用控制器:

$scope.$on("eventName", callbackFn); 
  1. 使用服務/因素Ÿ在兩者之間進行溝通。由於它們是單身人士,您可以將服務/工廠注入到兩個控制器中,然後使用它們在控制器之間進行通信。這通常是實施控制器到控制器通信的更廣泛接受的方法。
+0

您還可以獲取控制器正在調用的元素$ scope(),但是#3是處理交叉控制器通信的真正廣泛接受的方法。 – PiniH 2014-11-22 13:27:17

相關問題