2016-06-23 6 views
5

W Angular 1.5, chcę załadować szablon poprzez niestandardową obietnicę. Przykładowy kod, który chciałabym aby uruchomić toZaładuj szablon kątowy 1.5 komponentu za pomocą obietnicy

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() { 

} 
}); 

Powód chcę zrobić to załadować szablon z iframe proxy.

Jeśli istnieje sposób dostarczenia mojego niestandardowego szablonu tłumaczącego dla obietnicy, która również byłaby wystarczająca.

+0

Spójrz za ten post http://stackoverflow.com/questions/22189298/angularjs-returning-a-promise-in-directive-template-function. Wydaje się, że ten sam problem dotyczy dyrektywy. Myślę, że możesz wypróbować podobny approch – Silvinus

Odpowiedz

3

Rozwiązałem problem zastępując $ templateRequestService kątowego przy użyciu dekoratora.

Patrz przykład kodu poniżej:

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

Możesz użyć return $ q.when(), aby uniknąć bezpośredniego odroczenia. – Vitalii

Powiązane problemy