Javascript 无法从angularjs ionic framework中的另一个控制器调用方法
我想从Javascript 无法从angularjs ionic framework中的另一个控制器调用方法,javascript,angularjs,ionic-framework,Javascript,Angularjs,Ionic Framework,我想从lihatkhscocontroller到khscocontroller触发/调用callkhs: function KhsController($scope, $rootScope){ $scope.$emit('callkhs', {param:'test'}); } function LihatKhsController($scope, $rootScope){ $scope.$on("callkhs", function(event, data){
lihatkhscocontroller
到khscocontroller
触发/调用callkhs
:
function KhsController($scope, $rootScope){
$scope.$emit('callkhs', {param:'test'});
}
function LihatKhsController($scope, $rootScope){
$scope.$on("callkhs", function(event, data){
console.log('halo callkhs', data.param); //not show
});
}
我尝试从khscocontroller
到LihatController
获取参数:
function KhsController($scope, $rootScope){
$scope.$emit('callkhs', {param:'test'});
}
function LihatKhsController($scope, $rootScope){
$scope.$on("callkhs", function(event, data){
console.log('halo callkhs', data.param); //not show
});
}
请帮我解决这个问题。如果您使用
$scope.$emit
,它将只通知它的父scope
像这样
<div ng-contoller="LihatKhsController">
<div ng-controller="KhsController">
</div>
</div>
此处KhsController
将触发LihatKhsController
,因为LihatKhsController
是KhsController
的前身
如果使用$scope.$broadcast
,它将通知它的子项
像这样
<div ng-contoller="KhsController">
<div ng-controller="LihatKhsController">
</div>
</div>
function KhsController($scope, $rootScope){
$rootScope.$broadcast('callkhs', {param:'test'});
}
function LihatKhsController($scope, $rootScope){
$scope.$on("callkhs", function(event, data){
console.log('halo callkhs', data.param);
});
}
此处KhsController
将触发LihatKhsController
,因为KhsController
是LihatKhsController
的父级
<>他们都不考虑兄弟姐妹控制器如
<div ng-contoller="KhsController">
</div>
<div ng-controller="LihatKhsController">
</div>
你试过了吗?这是一种编写行为一致的应用程序的现代方法。有一个。其他答案使用
$rootScope.$broadcast
和相关的$rootScope.$on
将起作用,但我更喜欢在这种情况下使用$rootScope.$emit
。考虑到您正在收听的是$rootScope
,因此无法在整个作用域树中传播消息。使用$rootScope.$emit
和$rootScope.$on
,它本质上是一条直接消息。性能方面的好处可能可以忽略不计,但我认为这种方法没有任何缺点
var-app=angular.module('khsApp',[]);
app.controller(“KhsController”,函数($scope,$rootScope){
$scope.sendMessage=函数(){
$rootScope.$emit('message','messagesent');
}
});
app.controller(“lihatkhscocontroller”,函数($scope,$rootScope){
$rootScope.$on(“消息”,函数($event,data){
$scope.received=数据;
});
});代码>
发送
Angular默认情况下有此类工具。Angular不需要Redux。@AlexanderElgin这是错误的,Redux不是工具。您可以使用DI、$broadcast
、$scope
或任何方法来实现这一点,但是@Anik询问最佳实践是什么(代码的设计模式和可维护性)。redux是实现这一点的现代方法。在Angular中,最好的做法是不使用redux为什么?Redux是react打破一切的原因。react因其性能而广受欢迎。Redux只是React使用的工具。但是Angular中不需要它。您可以使用Service..在两个控制器中调用相同的函数吗。。!?