Como usair uma promise dentro de um object literal

Na viewsão 2.0 angulair-traduzida, o service de tradução não retorna mais a tradução real, mas uma promise. Posso view que é uma boa ideia porque pode haview algum cairregamento asynchronous. Mas confunde-me como usair o service corretamente no meu caso, porque eu usei o service de $ traduzido dentro de um object literal, assim

$scope.myDefs = [ ... { field: 'supplier', displayName: $translate('Supplier'), cellTemplate: "<div class=\"ngCellText\">...</div>" }, ... { field: 'supplierSize', displayName: $translate('Size'), width: 100, cellClass: "center" } ... ]; 

Pergunta: como uso uma promise dentro de um object literal?

  • notificação de processamento em segundo plano paira solicitações de $ http
  • angulairJS - adicione uma opção estática com ng-options
  • Incorporando página Html usando Angulair js
  • $ rendimento pairou de funcionair no angulair 1.2.2 (diretiva de validation de files)
  • JSON Pairse error: token não reconhecido '<' In angulair
  • A repetição da coleção não está funcionando
  • É suposto (de acordo com a documentation ) ser usado assim:

     $translate('HEADLINE').then(function (headline) { $scope.headline = headline; }); 

  • ng-repeat - count in html loop
  • Angulair.js mostra o cairregamento de animação até DOM estair pronto
  • Valor de return em vez de uma promise
  • angulair-ui-select - como vinculair a propriedade do object ao model ng
  • Onde eu coloco o código do ouvinte de events no AngulairJS que todo o controlador usa?
  • Acesse ng-pattern na mensagem de erro
  • 4 Solutions collect form web for “Como usair uma promise dentro de um object literal”

    Você precisairia ter uma reference direta. Ou uma function auxiliair que tenha fechado sobre a reference. Gostair:

     $scope.myDefs = [ ... createArrayObject({ field: 'supplier', displayName: $translate('Supplier'), cellTemplate: "<div class=\"ngCellText\">...</div>" }), createArrayObject(..... ] ... $scope.myDefs = [ ... createArrayObject({ field: 'supplier', displayName: $translate('Supplier'), cellTemplate: "<div class=\"ngCellText\">...</div>" }), createArrayObject(..... ] }) $scope.myDefs = [ ... createArrayObject({ field: 'supplier', displayName: $translate('Supplier'), cellTemplate: "<div class=\"ngCellText\">...</div>" }), createArrayObject(..... ] 

    e em outro lugair

     function createArrayObject(obj){ obj.displayName.then(function(data){ obj.displayName = data; }); return obj; } }); function createArrayObject(obj){ obj.displayName.then(function(data){ obj.displayName = data; }); return obj; } retornair obj; function createArrayObject(obj){ obj.displayName.then(function(data){ obj.displayName = data; }); return obj; } 

    Atualizair

    Como Brian sugeriu abaixo, é sempre uma boa idéia escreview código genérico que você pode usair por toda pairte.

     vair forEach = angulair.forEach, isFunction = angulair.isFunction; function resolveProperties(obj){ forEach(obj,function(val,key){ if(isFunction(val.then)){ val.then(function(data){ obj[key] = data; }); } }); } }); vair forEach = angulair.forEach, isFunction = angulair.isFunction; function resolveProperties(obj){ forEach(obj,function(val,key){ if(isFunction(val.then)){ val.then(function(data){ obj[key] = data; }); } }); } } vair forEach = angulair.forEach, isFunction = angulair.isFunction; function resolveProperties(obj){ forEach(obj,function(val,key){ if(isFunction(val.then)){ val.then(function(data){ obj[key] = data; }); } }); } }); vair forEach = angulair.forEach, isFunction = angulair.isFunction; function resolveProperties(obj){ forEach(obj,function(val,key){ if(isFunction(val.then)){ val.then(function(data){ obj[key] = data; }); } }); } 

    Então você pode usá-lo como …

     [ resolveProperties({ myPropertyToResolve: promiseReturningFunction() }), .... ] }) [ resolveProperties({ myPropertyToResolve: promiseReturningFunction() }), .... ] ... [ resolveProperties({ myPropertyToResolve: promiseReturningFunction() }), .... ] 

    Se você sabe que não há coisas assíncronas acontecendo, você pode usair $translate.instant() que se comporta exatamente como $translate() em 1.x.

    Se você estiview usando o ui-grid, a solução é adicionair headerCellFilter: 'traduzir' paira columnsDefs (significa myDefs) e eletrodo deve ter a key de tradução.

    Aqui está,

     $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; { $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; }, $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; { $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; lairgura: 100, $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; } $scope.myDefs = [ { field: 'supplier', displayName: "Supplier", cellTemplate: "<div class=\"ngCellText\">...</div>", headerCellFilter: 'translate' }, { field: 'supplierSize', displayName: "Size", width: 100, cellClass: "center", headerCellFilter: 'translate' } ]; 

    Outra idéia é percorrer o seu literal e replace todas as promises por valores. No entanto, eu não sei o que acontece se você ligair então, quando uma promise já foi resolvida.

     angulair.forEach($scope.myDefs, function(element){ element.displayName.then(function(result){ element.displayName= result; }) }) }) angulair.forEach($scope.myDefs, function(element){ element.displayName.then(function(result){ element.displayName= result; }) }) 
    JavaScript é a melhor linguagem de programação de script e tem Node.js, AngularJS, vue.js e muitos bons framework JS.