Ionic - AngularJS:通过控制器外部的模板调用方法
Ionic - AngularJS: calling methods via template outside of Controller
所以,这是一个示例代码:
<div ng-controller="MyControllerOne">
<span ng-click="foobar()">Click Me!</span>
</div>
我可以在不更改控制器的情况下从该模板调用 MyControllerTwo 中的函数 foobar():
.controller('MyControllerOne', function($scope) {
//some code
})
.controller('MyControllerTwo', function($scope) {
// method I wanna call
function foobar(){
}
})
虽然不是最漂亮的解决方案,但在技术上是可行的……大概。
如果您将 HTML 更新为:
<div ng-controller="MyControllerOne">
<span ng-controller="MyControllerTwo as mct" ng-click="mct.foobar()">Click Me!</span>
</div>
那么你应该得到你预期的结果。
您可以通过在控制器中注入“$controller”服务,从模板中调用另一个控制器中的方法。下面是演示和代码。
你可以在这里看到演示:http://plnkr.co/edit/oBEKxamgJv0uDVsJJwth?p=preview
HTML:
<body ng-controller="MainCtrl">
<div ng-click="fooBar()">Click Me!</div>
</body>
JS:
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');
};
});
很老的问题,但如果有人仍在寻找替代答案...
应该可以使用 $emit 或 $broadcast.
来自 ControllerOne 的赞:
$rootScope.$broadcast('callToFoobat',{});
然后从 ControllerTwo :
$scope.$on('callToFoobat', function(){
// whatever you want, so why not a call to foobar
})
只是一个粗略的解决方案。可能比 $rootScope.$broadcast 更优雅或更轻巧。并且可能考虑在需要时停止传播。
所以,这是一个示例代码:
<div ng-controller="MyControllerOne">
<span ng-click="foobar()">Click Me!</span>
</div>
我可以在不更改控制器的情况下从该模板调用 MyControllerTwo 中的函数 foobar():
.controller('MyControllerOne', function($scope) {
//some code
})
.controller('MyControllerTwo', function($scope) {
// method I wanna call
function foobar(){
}
})
虽然不是最漂亮的解决方案,但在技术上是可行的……大概。
如果您将 HTML 更新为:
<div ng-controller="MyControllerOne">
<span ng-controller="MyControllerTwo as mct" ng-click="mct.foobar()">Click Me!</span>
</div>
那么你应该得到你预期的结果。
您可以通过在控制器中注入“$controller”服务,从模板中调用另一个控制器中的方法。下面是演示和代码。
你可以在这里看到演示:http://plnkr.co/edit/oBEKxamgJv0uDVsJJwth?p=preview
HTML:
<body ng-controller="MainCtrl">
<div ng-click="fooBar()">Click Me!</div>
</body>
JS:
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');
};
});
很老的问题,但如果有人仍在寻找替代答案... 应该可以使用 $emit 或 $broadcast.
来自 ControllerOne 的赞:
$rootScope.$broadcast('callToFoobat',{});
然后从 ControllerTwo :
$scope.$on('callToFoobat', function(){
// whatever you want, so why not a call to foobar
})
只是一个粗略的解决方案。可能比 $rootScope.$broadcast 更优雅或更轻巧。并且可能考虑在需要时停止传播。