【问题标题】:Angularjs, how call controller from another controllerAngularjs,如何从另一个控制器调用控制器
【发布时间】:2014-11-22 21:34:51
【问题描述】:

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

如何在myapp-controll控制器中调用控制器cook

<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>

【问题讨论】:

    标签: javascript jquery html angularjs angularjs-scope


    【解决方案1】:

    有几种方法,有些比其他方法更糟糕:

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

    2. 您可以使用事件委托,通过使用$scope.$emit 将事件信息向上发送到作用域链:

    myapp-控制器:

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

    应用控制器:

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

    【讨论】:

    • 您也可以获取控制器所在的元素并调用 .$scope(),但 #3 确实是被广泛接受的处理跨控制器通信的方式。
    猜你喜欢
    • 2014-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多