我不知道创建绑定属性值的指令的方法,但也许你可以看看这个以前的 SO 答案:自定义输入类型
这个想法是使用指令的编译功能根据属性的值创建不同的模板。您可以在开始时缓存所有自定义输入模板(不是必需的)。
angular.module('myapp', ['myapp.directives'])
.run(['$http', '$templateCache', function($http, $templateCache) {
$templateCache.put('span.html', '<span>text</span>');
$http.get('back_button.html', {cache:$templateCache});
}]);
并根据 type 属性从缓存中检索输入模板:
angular.module('myapp.directives', [])
.directive('ui', ['$templateCache', function($templateCache) {
return {
restrict: 'E',
compile: function(elem, attrs)
{
var type = attrs.type || 'span.html'; // default value ?
elem.replaceWith($templateCache.get(type));
}
}
}]);
此代码未经测试。
编辑:我认为,这也可以工作,使用带有 $compile 的链接函数,而不预加载模板,但仍然缓存它们:
angular.module('myapp.directives', [])
.directive('ui', ['$http', '$templateCache', '$compile', function($http, $templateCache, $compile) {
return {
restrict: 'E',
link: function(scope, elem, attrs)
{
var type = attrs.type || 'span.html'; // default value ?
$http.get('views/' + type + '.html', {cache: $templateCache}).then(function(result) {
elem.replaceWith($compile(result.data)(scope));
});
}
}
}]);
这段代码对我有用。