Sha*_*dse 5 callback angularjs angularjs-scope
我有一个名为saveInDB的函数.这将数据保存在数据库中.对象作为参数传递给函数.
$scope.SaveDB(iObj,function(iResult){
//after a sucessfull opreation in the DB. Now I need iObj to be passed to other controller.
// I have used $emit method
$rootScope.$emit('saveCallback');
})
Run Code Online (Sandbox Code Playgroud)
在其他控制器中,我需要访问iObj到其他控制器.我没有得到这个对象.在我的控制器中
var _save = $rootScope.$on('saveCallback',function(){
//i want same obj(which is used for saving ) to be access here.
})
Run Code Online (Sandbox Code Playgroud)
Kha*_* TO 18
1)如果您的控制器是父子,并且您从子控制器发出事件,您只需要$发出事件,而父控制器只使用$ on来监听它.
从子控制器发出事件:
$scope.SaveDB(iObj,function(iResult){
$scope.$emit('saveCallback',iResult); //pass the data as the second parameter
});
Run Code Online (Sandbox Code Playgroud)
听取事件(在父控制器中):
$scope.$on('saveCallback',function(event,iResult){//receive the data as second parameter
});
Run Code Online (Sandbox Code Playgroud)
2)如果您的控制器是兄弟姐妹
从您的控制器,您$emit将事件发送到父母的范围.
$scope.SaveDB(iObj,function(iResult){
$scope.$emit('saveCallback',iResult);
});
Run Code Online (Sandbox Code Playgroud)
然后,您父母的范围将侦听此事件并将$broadcast其侦听给其子级.这个方法可以写在角度模块的.run块内
$scope.$on('saveCallback',function (event,iresult){
$scope.$broadcast('saveCallback',iresult);
});
Run Code Online (Sandbox Code Playgroud)
或者你可以将$ rootScope注入控制器并让它广播事件:
$scope.SaveDB(iObj,function(iResult){
$rootScope.$broadcast('saveCallback',iResult);
});
Run Code Online (Sandbox Code Playgroud)
对活动感兴趣的范围可以订阅:
$scope.$on('saveCallBack',function(event, data) {
//access data here
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17071 次 |
| 最近记录: |