订阅子作用域上的事件和 broadcast\emit 中的 return 回调
Subscribe an event on child scope and return callback in broadcast\emit
我是看完才来的@toddmotto excellent post, this, this and this answers, the api现在我有这样的ctrl结构
<div ng-controller="ParentCtrl as parent" class="ng-scope">
<div ng-controller="SiblingOneCtrl as sib1" class="ng-scope"></div>
<div ng-controller="SiblingTwoCtrl as sib2" class="ng-scope"></div>
<div class="btn btn-primary"
ng-click="parent.events.saveDreaft()">
<span class="glyphicon glyphicon-ok"></span>
<span>Save</span>
</div>
</div>
&&
define(['app'], function (app) {
app.controller("ParentCtrl", ['$scope', '$q', function ($scope, $q) {
var parent= this;
parent.data = {};
parent.events = {
saveDreaft: function() {
$scope.$broadcast('saveDreaft');
//return $q(function(resolve, reject) {
// try {
// var ee = $scope.$broadcast('saveDreaft');
// if (ee)
// resolve();
// } catch (ex) {
// reject(ex);
// }
//});
}
};
}]);
});
//=======
define(['app'], function (app) {
app.controller("SiblingOneCtrl", ['$scope', '$http', '$q',
function ($scope, $http, $q) {
var sib1 = this;
sib1.events = {
saveSib1Form: function () {
return $http.post('..', ..)
.then(function (res) {..})
.catch(function (ex) {..});
}
};
var unbind = $scope.$on('saveDreaft', function (event, data) {
sib1.events.saveSib1Form();
//return $q.when(sib1.events.saveSib1Form)
// .then(function(res) {
// event.targetScope.callbackRes = {
// res: res,
// flag: true
// };
// })
// .catch(..);
});
$scope.$on('$destroy', unbind);
}]);
});
当客户从父范围点击保存时,我们希望子 运行 他自己的保存方法,然后向发布者发送一些回调,比如 jQuery.Callbacks()
他可能完成 $q
承诺。
有什么建议吗?
您可以使用 $emit
在子作用域中实现 callback-like 函数:
sib1.events.saveSib1Form();
$scope.$emit('saveComplete', args);
并在您的父级范围内注册 $emit
事件:
$scope.$on('saveComplete', function(event, args) {
//your callback code
})
我是看完才来的@toddmotto excellent post, this, this and this answers, the api现在我有这样的ctrl结构
<div ng-controller="ParentCtrl as parent" class="ng-scope">
<div ng-controller="SiblingOneCtrl as sib1" class="ng-scope"></div>
<div ng-controller="SiblingTwoCtrl as sib2" class="ng-scope"></div>
<div class="btn btn-primary"
ng-click="parent.events.saveDreaft()">
<span class="glyphicon glyphicon-ok"></span>
<span>Save</span>
</div>
</div>
&&
define(['app'], function (app) {
app.controller("ParentCtrl", ['$scope', '$q', function ($scope, $q) {
var parent= this;
parent.data = {};
parent.events = {
saveDreaft: function() {
$scope.$broadcast('saveDreaft');
//return $q(function(resolve, reject) {
// try {
// var ee = $scope.$broadcast('saveDreaft');
// if (ee)
// resolve();
// } catch (ex) {
// reject(ex);
// }
//});
}
};
}]);
});
//=======
define(['app'], function (app) {
app.controller("SiblingOneCtrl", ['$scope', '$http', '$q',
function ($scope, $http, $q) {
var sib1 = this;
sib1.events = {
saveSib1Form: function () {
return $http.post('..', ..)
.then(function (res) {..})
.catch(function (ex) {..});
}
};
var unbind = $scope.$on('saveDreaft', function (event, data) {
sib1.events.saveSib1Form();
//return $q.when(sib1.events.saveSib1Form)
// .then(function(res) {
// event.targetScope.callbackRes = {
// res: res,
// flag: true
// };
// })
// .catch(..);
});
$scope.$on('$destroy', unbind);
}]);
});
当客户从父范围点击保存时,我们希望子 运行 他自己的保存方法,然后向发布者发送一些回调,比如 jQuery.Callbacks()
他可能完成 $q
承诺。
有什么建议吗?
您可以使用 $emit
在子作用域中实现 callback-like 函数:
sib1.events.saveSib1Form();
$scope.$emit('saveComplete', args);
并在您的父级范围内注册 $emit
事件:
$scope.$on('saveComplete', function(event, args) {
//your callback code
})