2016-06-23 15 views
5

In Angular 1.5 möchte ich die Vorlage über benutzerdefinierte Versprechen laden. Der Beispielcode, die Ich mag würde laufen istLaden Sie angular 1.5 Komponente Vorlage über Versprechen

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

} 
}); 

Der Grund, warum ich tun möchte, ist dies die Vorlage aus einem Proxy-iframe zu laden.

Wenn es eine Möglichkeit gibt, meine benutzerdefinierte Vorlage Resolver für Versprechen zur Verfügung zu stellen, würde das ausreichen.

+0

diesen Beitrag http://stackoverflow.com/questions/22189298/angularjs-returning-a-promise-in-directive-template-function Schauen. Es scheint das gleiche Problem mit der Direktive zu sein. Ich denke, dass Sie eine ähnliche Annäherung versuchen können – Silvinus

Antwort

3

Ich löste das Problem durch Ersetzen von $ templateRequestService von eckigen mit Decorator.

das Codebeispiel Siehe unten:

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

Sie können Rückkehr $ q.when() verwenden, um zu vermeiden, Defer direkt zu verwenden. – Vitalii