通过 promise 加载 angular 1.5 组件模板
Load angular 1.5 component template via promise
在Angular 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 () {
}
});
我想这样做的原因是从代理 iframe 加载模板。
如果有任何方法可以为承诺提供我的自定义模板解析器就足够了。
我通过使用装饰器替换 angular 的 $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;
}]);
}]);
在Angular 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 () {
}
});
我想这样做的原因是从代理 iframe 加载模板。
如果有任何方法可以为承诺提供我的自定义模板解析器就足够了。
我通过使用装饰器替换 angular 的 $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;
}]);
}]);