0

我正在尝试将 $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 视为结果值。

但我想我误解了这一点,我用错了。我有函数返回,因为用户可以更改(承诺更改)并且我希望我的模板引擎能够了解与承诺有关的事情已经改变的事实(即,我在用户更改时创建了一个新的承诺并且我希望我的模板看到那个。

编辑:

这是一个显示我想要了解的内容的 plunker: http ://plnkr.co/edit/6J9pWY?p=preview

4

1 回答 1

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>
于 2013-07-31T15:05:06.137 回答