【发布时间】:2017-08-29 00:25:54
【问题描述】:
我正在处理一个使用 mean.js 堆栈的项目。而且我需要创建一个可以在每个其他模块中使用的功能。我一直在阅读,我发现我必须将功能作为服务。对,这就是我的服务getSchoolByUser():
angular.module('schools').factory('Schools', ['$resource',
function($resource) {
return $resource('api/schools/:schoolId', {
schoolId: '@id'
}, {
update: {
method: 'PUT'
},
getSchoolByUser: {
url: 'api/schoolByUser/:schoolPrincipalId',
params: {
schoolPrincipalId: 'schoolPrincipalId'
},
isArray: false
}
});
}
]);
这个功能我会在每次创建新目录时使用。这是我如何在 CourseController 上使用它来创建新课程的示例:
angular.module('courses')
.controller('CoursesController', ['$scope',
'$stateParams',
'$location', 'Authentication',
'Courses','Schools',
function($scope, $stateParams, $location, Authentication, Courses, Schools) {
$scope.authentication = Authentication;
// Create new course
$scope.create = function(isValid) {
$scope.error = null;
if (!isValid) {
$scope.$broadcast('show-errors-check-validity', 'courseForm');
return false;
}
var course = new Courses($scope.course);
$scope.school = Schools.getSchoolByUser({schoolPrincipalId: $scope.authentication.user.id
}, function () {
course.SchoolId = $scope.school.id;
console.log(course);
course.$save(function(response) {
//some code here
}, function(errorResponse) {
$scope.error = errorResponse.data.message;
});
});
};
}
]);
有没有一种方法可以让我以同步的方式在函数内部返回,这样我就可以将它直接分配给范围,然后像这样继续保存:
course.SchoolId = getSchoolByUser();
course.$save(function(response) {
【问题讨论】:
-
基本上,你问的是如何让 AJAX 同步?
-
我想我不熟悉 ajax :( 抱歉
-
所以你不想要一个异步服务调用?
-
那是个问题
-
你可以把它变成一个承诺,然后在承诺的回调中继续你的下一段代码docs.angularjs.org/api/ng/service/$q
标签: javascript angularjs meanjs