2016-06-23 4 views
5

В Angular 1.5 я хочу загрузить шаблон с помощью пользовательских обещаний. пример кода, который я хотел бы запустить этоЗагрузите угловой шаблон из 1,5 компонентов с помощью обещания

var module = angular.module("myApp", []); 
module.component("component", { 
template: ["$q", function ($q) { 

    var defer = $q.defer(); 

    setTimeout(function() { 
     defer.resolve("<p>Hello world</p>"); 
    }, 100) 
    return defer.promise; 
}], 
controller: function() { 

} 
}); 

Поэтому я хочу, чтобы сделать это, чтобы загрузить шаблон из прокси-фрейма.

Если есть какой-либо способ предоставить мой пользовательский шаблонный резольвер для обещания, которого будет достаточно.

+0

Посмотрите этот пост http://stackoverflow.com/questions/22189298/angularjs-returning-a-promise-in-directive-template-function. Кажется, что такая же проблема с директивой. Я думаю, вы можете попробовать аналогичный подход – Silvinus

ответ

3

Я решил проблему, заменив $ templateRequestService углового использования декоратора.

Смотрите пример кода ниже:

module.config(["$provide", function ($provide) { 

$provide.decorator("$templateRequest", [ 
    "$delegate", "$q", // DI specifications 
    function ($delegate, $q) { 

     // replace the delegate function 
     $delegate = function (tpl) { 
      var defer = $q.defer(); 
      // convert the tpl from trustedvaluetoken to string 
      if (typeof (tpl) !== "string" || !!$templateCache.get(tpl)) { 
       tpl = $sce.getTrustedResourceUrl(tpl); 
      } 
      // make proxy call and resolve the promise; 

      // Make an async call 
      return defer.promise; 
     } 
     // return the modified delegate function 
     return $delegate; 
    }]); 

}]); 
+0

Вы можете использовать return $ q.when(), чтобы избежать прямого использования. – Vitalii

Смежные вопросы