0

の外テンプレート経由でメソッドを呼び出して、ここではサンプルコードがあります:イオン - AngularJS:だからコントローラー

<div ng-controller="MyControllerOne"> 
    <span ng-click="foobar()">Click Me!</span> 
</div> 

私は、そのテンプレートから、コントローラを変更せずに、(機能foobarに呼び出すことができます)MyControllerTwoで

.controller('MyControllerOne', function($scope) { 
    //some code 
}) 
.controller('MyControllerTwo', function($scope) { 
    // method I wanna call 
    function foobar(){ 
    } 
}) 
+0

ここでサービスを利用できます。永続的なデータを操作するメソッドをサービスに追加します。このメソッドはサービス内にも存在する必要があります – aliasav

答えて

1

きれいな解決策ではないが、それは技術的には可能です...っぽいです。

<div ng-controller="MyControllerOne"> 
    <span ng-controller="MyControllerTwo as mct" ng-click="mct.foobar()">Click Me!</span> 
</div> 

次に、あなたが期待する結果を取得する必要があります:あなたがあなたのHTMLを更新した場合

1

コントローラに '$ controller'サービスを注入することで、テンプレートから別のコントローラにあるメソッドを呼び出すことができます。以下はデモとコードです。いずれかがまだ代替の答えを探している場合

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope, $controller) { 
    $controller('SubCtrl', {$scope: $scope}); 
}); 

app.controller('SubCtrl', function($scope) { 
    $scope.fooBar = function() { 
    alert('second controller'); 
    }; 
}); 
1

かなり古い質問が、..:http://plnkr.co/edit/oBEKxamgJv0uDVsJJwth?p=preview

HTML::

<body ng-controller="MainCtrl"> 
    <div ng-click="fooBar()">Click Me!</div> 
    </body> 

JSを

あなたはデモここで見ることができます $ emitまたは$ broadcastを使用することは可能です。 ControllerOneから

同様:ControllerTwoから

$rootScope.$broadcast('callToFoobat',{}); 

そして:

$scope.$on('callToFoobat', function(){ 
    // whatever you want, so why not a call to foobar 
}) 

だけラフソリューション。 $ rootScope。$ broadcastよりもエレガントで軽いかもしれません。必要に応じて伝播を止めることを考えてみてください。

関連する問題