Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Angularjs,如何从另一个控制器调用控制器_Javascript_Jquery_Html_Angularjs_Angularjs Scope - Fatal编程技术网

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

Javascript Angularjs,如何从另一个控制器调用控制器,javascript,jquery,html,angularjs,angularjs-scope,Javascript,Jquery,Html,Angularjs,Angularjs Scope,我试图调用另一个控制器中的控制器,为特定的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

我试图调用另一个控制器中的控制器,为特定的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>

var myapp=angular.module('myapp',[]);
myapp.config(函数($routeProvider){
$routeProvider
.when(“/:access”{
templateUrl:'sources/default.html',
控制器:“myapp控制器”
})
});
myapp.controller('myapp-controll',函数($scope,$routeParams){
$scope.templateUrl='sources/'+$routeParams.acess+'.html';
});
myapp.controller('cook',函数($scope,$routeParams){
$scope.pagetitle='cook';
});

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

  • 通过使用
    $scope.$parent
    myapp controller
    调用父作用域,可以使用作用域继承。这种方式非常脆弱,因为如果在某个点中间引入另一个范围,则代码将中断。这很可能是通过
    ng repeat
    ng if
    等方式实现的。另外,Angular 2.0正在取消$scope,因此如果您想让代码成为未来的证明,我将远离这种方法

  • 通过使用
    $scope.$emit
    向作用域链发送事件信息,可以使用事件委派:

  • myapp控制器:

    $scope.$emit("eventName", eventData);
    
    $scope.$on("eventName", callbackFn);
    
    应用程序控制器:

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

  • 您还可以获取控制器所在并调用的元素。$scope(),但是#3确实是处理跨控制器通信的广泛接受的方式。