bal*_*teo 1 javascript callback angularjs
我想要分解出 angularjs $ http成功回调函数,这样我就不会有两个(或N个)匿名回调函数,而是有一个名为callback的函数.
这是两个控制器:
function CreateCurriculumCtrl($scope, $http, $location, select2Options){
$scope.curriculumInfo = {};
$scope.curriculumInfo.statusOK = true;
$scope.select2Options = select2Options;
$scope.saveCurriculum = function(){
$http.post('bignibou/curriculum/new', $scope.curriculumInfo).success(function(curriculumInfo) {
if(curriculumInfo.statusOK == true){
$scope.curriculumInfo.statusOK=true;
$location.path('/view/'+curriculumInfo.curriculum.id);
}
else{
$scope.curriculumInfo.statusOK = false;
$scope.curriculumInfo.errors = curriculumInfo.errors;
}
});
};
}
function EditCurriculumCtrl($scope, $http, $location, select2Options, $routeParams){
$scope.curriculumInfo = {};
$scope.curriculumInfo.statusOK = true;
$scope.select2Options = select2Options;
$scope.id = $routeParams.id;
$http.get('/bignibou/utils/findCurriculumById.json',{params: {id: $routeParams.id}}).success(
function(curriculum){
$scope.curriculumInfo.curriculum = curriculum;
});
$scope.editCurriculum = function(){
$http.post('bignibou/curriculum/edit/'+$routeParams.id, $scope.curriculumInfo)
.success(function(curriculumInfo) {
if(curriculumInfo.statusOK == true){
$scope.curriculumInfo.statusOK=true;
$location.path('/view/'+curriculumInfo.curriculum.id);
}
else{
$scope.curriculumInfo.statusOK = false;
$scope.curriculumInfo.errors = curriculumInfo.errors;
}
});
};
}
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做,因为将成为命名的回调函数有几个依赖(即$ scope和$ location).
如果我从angularjs控制器中提取函数(命名回调),则命名回调不再访问其依赖项.
任何人都可以帮助分解成功回调函数并确保依赖性满足吗?
只需将它们作为参数传递.
首先,$http.post期望回调接受一个参数.所以我们编写了post期望的函数:
function (curriculumInfo) {
// .....
}
Run Code Online (Sandbox Code Playgroud)
但是函数的主体需要访问$scope和$location.所以我们编写一个接受它们的函数并返回post期望的函数:
function (scope,location) {
return function (curriculumInfo) {
// ... use scope and location in here
}
}
Run Code Online (Sandbox Code Playgroud)
现在我们可以恰当地命名该函数.让我们看看,它的处理,以新课程的反应,所以我想无论是把它new_curriculum_callback或new_curriculum_callback或handle_new_curriculum以表明它是一个回调函数:
function handle_new_curriculum (scope,location) {
return function (curriculumInfo) {
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以调用它来将回调函数返回到post:
$http
.post('bignibou/curriculum/new',$scope.curriculumInfo)
.success(handle_new_curriculum($scope,$location));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3770 次 |
| 最近记录: |