角度插值使用" async"功能

时间:2014-04-28 14:25:41

标签: angularjs

我的表有这样的代码(玉符号):

table.displaytable   
 tbody
  tr(ng-repeat="item in itemList"): td
   b {{item.Id}}
   td {{getTypeName(item.TypeId)}}

和getTypeName实际上正在调用一些异步序列:

$scope.getTypeName = function (typeId) {
            var lang= CurrentLanguageService.getCurrentCulture();
            var label= TypesService.getLabelAsync(typeId, lang);
            return label;
        }

在服务中我将函数定义为

var getLabelAsync = function (id, langCulture) {
       return loadPromise(langCulture).then(function (data) {
                    return data;
               }

我有以下问题:

  1. 我是否正确使用承诺的数据来返回实际的"标签"来自我的getLabelAsync()?

  2. 为什么我看到多个调用来解析promise(触发三次调用服务器),而我只有一行表要插值?

  3. 我也来了

    错误:[$ interpolate:interr]无法插值:{{getTypeName(item.typeId)}} TypeError:无法读取属性'然后'为null

2 个答案:

答案 0 :(得分:0)

var getLabelAsync = function (id, langCulture) {
       return loadPromise(langCulture); //Just return the promise that will later resolve
}

如果你需要做出自己的承诺,你想稍后解决,你可以使用deferred = $ q.defer();并返回deferrred.promise;然后在回调函数中,您可以调用deferred.reject或deferred.resolve来最终解析您创建的新承诺。如果你有多个承诺,你也可以使用$ q.all,并且你想知道它们何时被解决了。

答案 1 :(得分:0)

不确定您是否正确使用了承诺,它应该如下所示:

myApp.service('someservice',function($q,$http){

this.someFunction = function () {
                var defer = $q.defer();
                //do some ajax call here
                $http.get('blah.html',function(data){
                   // pass data to your promise then function
                   defer.resolve(data);
                });
                //return your promise
                return defer.promise;
           }

 });
你可以这样使用它:

 functionc Ctrl($scope,someservice) {
    someservice.someFunction().then(data) {
       console.log(data);
    };
 }