如何在angularjs中创建服务函数syncronus

时间:2017-04-04 00:32:37

标签: javascript angularjs meanjs

我正在使用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) {

1 个答案:

答案 0 :(得分:0)

您可以使用$ j service of angularjs(https://docs.angularjs.org/api/ng/service/ $ q)来实现这一目标。