模板引擎中的承诺似乎不起作用

时间:2013-07-31 14:01:17

标签: angularjs

我正在尝试将$ scope变量设置为promise并在模板引擎中使用该scope变量,但它似乎不起作用。

在控制器中:

  $scope.getUser = function() {
    // I am returning a promise
    // need this to be in a function so angular calls the function
    // more than once as the promise may change if a new user logs in,
    // i.e. myself is now someone new
    return UserService.getMyself();
  }

服务:

  var userDeferred = $q.defer();

  // Some other code here which resolves the promise.
  // I have verified that the promise does get resolved.      

  service.getMyself = function () {
    return userDeferred.promise;
  };

在html中:

 <button>
  {{getUser().username}} 
 </button>

我是从角度文档中读到的:

  

$ q promises被模板引擎识别为angular   意味着在模板中,您可以将附加到范围的承诺视为   如果它们是结果值。

但是我想我误解了这个并且我使用了这个错误。我有函数返回,因为用户可以更改(保证更改),我希望我的模板引擎能够接收到关于promise的更改的事实(即我创建了一个新的promise,因为用户已更改,我希望我的模板能够看到了。

编辑:

这是一个展示我想要获得的东西: http://plnkr.co/edit/6J9pWY?p=preview

1 个答案:

答案 0 :(得分:0)

我不确定什么不适合你(你没有提供足够的信息)但这里有一个示例代码似乎有用:

http://embed.plnkr.co/Ve5KV8m1UbVHeAtpTjFK/preview

<强>的Javascript

angular.module('myModule', [])
  .factory('UserService', function($q, $timeout) {

    var getMyself = function() {
      var userDeferred = $q.defer();

      $timeout(function() {
        userDeferred.resolve({username: 'root'});
      }, 2000);

      return userDeferred.promise;
    };

    return {
      getMyself: getMyself
    };
  })

  .controller('HelloCtrl', function($scope, UserService) {
      $scope.user = UserService.getMyself();
  });

<强> HTML

  <body ng-app="myModule" ng-controller="HelloCtrl">
    <h1>User:</h1>
    {{user.username}}
  </body>