2017-02-13 62 views
0

我有2个控制器我想调用另一个控制器中的一个功能。我使用这个,我没有使用任何$范围。我怎样才能从一个控制器调用一个功能到另一个。

var app = angular.module("myapp", []);

app.controller("myctl", function() { 
var parent= this; 
    parent.SayHello = function() { 
     // code 
    } 

}) 

app.controller("otherctl", function() { 
    var child = this; 
    // how to call sayHello without $scope 
}) 
+0

难道你还别说你为什么要做这种方式。你能否创建一个工厂并注入这两个控制器? – Alok

+1

控制器是否嵌套? – Korte

+0

你可以使用事件,服务(如前所述)或@Korte用'$ parent'暗示,如果你有一个孩子的关系。这一切都取决于你没有提供多少内容。 – ste2425

回答

1

cannot,即使您正在使用

你不能inject一个控制器到另一个控制器。

为了在控制器之间共享数据,请考虑使用factory/service

DEMO

var app = angular.module("clientApp", []) 
 
app.controller("TestCtrl", 
 
    function($scope,names) { 
 
    $scope.names =[]; 
 
    $scope.save= function(){ 
 
     names.add($scope.name); 
 
    } 
 
    
 
    }); 
 
app.controller("TestCtrl2", 
 
    function($scope,names) { 
 
    $scope.getnames = function(){ 
 
    $scope.names = names.get(); 
 
    } 
 
}); 
 
    
 
app.factory('names', function(){ 
 
    var names = {}; 
 
    names.list = []; 
 
    names.add = function(message){ 
 
    names.list.push({message}); 
 
    }; 
 
    names.get = function(){ 
 
    return names.list; 
 
    }; 
 
    return names; 
 
});
<!doctype html> 
 
<html > 
 
<head> 
 
    <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script> 
 
    <script src="script.js"></script> 
 
</head> 
 
<body ng-app="clientApp"> 
 
    <div ng-controller="TestCtrl"> 
 
    <input type="text" ng-model="name"> 
 
    <button ng-click="save()" > save</button>  
 
    </div> 
 
    <div ng-init="getnames()" ng-controller="TestCtrl2"> 
 
    <div ng-repeat="name in names"> 
 
     {{name}} 
 
     </div> 
 
</div> 
 
</body> 
 
</html>

相关问题