Angularjs,如何从另一个控制器调用控制器

时间:2014-11-22 13:17:57

标签: javascript jquery html angularjs angularjs-scope

我试图在另一个控制器内调用一个控制器,为一个特定的div命名。

如何在 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 个答案:

答案 0 :(得分:1)

有几种方式,有些方式比其他方式更差:

  1. 您可以使用myapp-controller$scope.$parent调用父作用域来使用作用域继承。这种方式非常脆弱,因为如果在某个点上在该链的中间引入了另一个范围,则代码将会中断。这很可能通过诸如ng-repeatng-if之类的东西来实现。另外,Angular 2.0正在取消$ scope,所以如果你想让你的代码在未来证明,我会远离这种方法

  2. 您可以使用事件委派,使用$scope.$emit在范围链中发送事件信息:

  3. MyApp的控制器:

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

    应用控制器:

    $scope.$on("eventName", callbackFn);
    
    1. 使用服务/工厂在两者之间进行通信。由于它们是单例,您可以将服务/工厂注入两个控制器,然后使用它在控制器之间进行通信。这通常是实现控制器到控制器通信的更广泛接受的方法。
相关问题