流星角度服务功能

时间:2015-09-03 16:09:40

标签: angularjs meteor

我在Angular-Meteor中创建了一个应用程序,我想在我的服务中创建一些我可以在我的控制器中使用的功能。但是,这些函数使用$ meteor.subscribe函数,该函数查询数据库并返回回调。在我的控制器中,我想调用该函数并将其绑定到$ scope,但它返回undefined,因为回调还没有返回任何内容。有没有解决方案来保持服务中的代码?有什么提示吗?

一个例子:

服务

angular.module('GQ').service('AuthService', ['$meteor', function($meteor)
{

    console.log('AuthService init')

    this.getUserAuth = function() {

        var user = {};
        $meteor.subscribe('isAdmin').then(function(res){
            //do database query...

            //loop over returned values and do a check if query matches or not
            // if it does match return true
            // else return false



        });

        // then return the value

        return user.isAdmin;
    }


}]);

控制器

$scope.isAdmin = AuthService.getUserAuth();
console.log($scope.isAdmin) <--- undefined

1 个答案:

答案 0 :(得分:2)

您可以使用角度承诺(official doc)。

您的服务示例:

ParsedChunk foobar( std::vector<Foo> bar, size_t* start_from) {
  size_t& i = *start_from;
  ParsedChunk result_so_far;
  for (;i < bar.size(); i++) {
    process_some_foo_and_update_chunk(result_so_far, bar[i]);
    if (check_condition(? ? ?) {
      return result_so_far;
    }
  }
}

在您的控制器中使用:

this.getUserAuth = function() {
    var deferred = $q.defer();
    var user = {};
    $meteor.subscribe('isAdmin').then(function(res, err){
        // ....

        // just an example
        if (!res.isAdmin) deferred.reject('not an admin');

        if (err) deferred.reject(err);
        else deferred.resolve(res);

    });
    return deferred.promise;
}