Ale*_*x B 1 javascript angularjs angularjs-directive
在模板中使用动态标记名称的Angular建议方法是什么?
我有一个包含h1-h6标签的下拉列表.用户可以选择其中任何一个,并且内容将更改为由所选标头标记(存储在$ scope中)进行包装.内容绑定到模型,即{{}}内.
要保持绑定,我可以更改标记并使用$ compile.但是,这不起作用,因为它会在Angular用模型值替换{{}}之前(显然)附加.这是页面加载时的h3.
例:
<div id="root">
<h3 id="elementToReplace">{{ modelData }}</h3>
</div>
Run Code Online (Sandbox Code Playgroud)
重新编译时我尝试使用如下字符串:
<{{ tag }} id="elementToReplace">{{ modelData }}</{{ tag }}>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
定义名为"tag"的范围变量,并将其绑定到选择列表和自定义指令.
HTML:
<select ng-model="tag" ng-init="tag='H1'">
<option ng-value="H1">H1</option>
<option ng-value="H2">H2</option>
<option ng-value="H3">H3</option>
<option ng-value="H4">H4</option>
<option ng-value="H5">H5</option>
</select>
<tag tag-name="tag">Hey There</tag>
Run Code Online (Sandbox Code Playgroud)
接下来,使用双向模型绑定将标记范围模型传递到指令中:
var app = angular.module('app',[]);
app.directive('tag', function($interpolate) {
return {
restrict: 'E',
scope: {
tagName: '='
},
link: function($scope, $element, $attr) {
var content = $element.html();
$scope.$watch('tagName', function(newVal) {
$element.contents().remove();
var tag = $interpolate('<{{tagName}}>{{content}}</{{tagName}}>')
({tagName: $scope.tagName, content: content});
var e = angular.element(tag);
$element.append(e);
});
}
}
});
Run Code Online (Sandbox Code Playgroud)
请注意,在custom指令中,我们使用$ interpolate服务根据在选择列表中选择的Tag生成HTML元素.$ watch函数用于监视标记模型的更改,当它更改时,新元素将附加到DOM.
| 归档时间: |
|
| 查看次数: |
3227 次 |
| 最近记录: |