3
我想基於一個模板,它又有一些動態屬性動態地生成一個表單。Angularjs指令:如何通過動態id找到一個元素,並修改模板
我越來越近,但無法檢索容器元素。
這是指令:
myApp.directive('myDirective', function() {
return {
template: "<div> <label>{{Field.Name}} <div id='{{Field.Name}}_Container'></div> </label></div>",
replace: true,
restrict: 'AE',
scope: {
Field: "=fieldInfo",
FieldData:"="
},
link: function (scope, element, attr) {
var input = "<input type='" + scope.Field.Type + "' data-ng-model='FieldData[" + scope.Field.Name + "]' />";
var inputEl = angular.element(input);
var container = angular.element("#" + scope.Field.Name + "_Container"); // Doesn't work
container.append(inputEl);
}
}
});
控制器:
function MyCtrl($scope) {
$scope.Fields = [
{ Name: "field1", Type: "text", Data:null },
{ Name: "field2", Type: "number", Data:null }
];
$scope.FieldData = {}; //{fieldname: fielddata}
}
HTML:
<div ng-controller="MyCtrl">
<my-directive data-ng-repeat="field in Fields" data-field-info="field">
</my-directive>
</div>
基本上我有字段描述符對象,並且需要生成基於該一個形式。 我不太確定如何引用一個容器對象 - 模板是否在鏈接之前編譯?
此外,我實際上使用templateUrl,如果這很重要。
這裏是一個fiddle。
+1但是,未來的讀者應該注意到element.find()是遞歸的,所以如果模板比這更復雜,你需要使用另一種方法(如element.children())。 –
更改了它。關鍵是在鏈接功能 – asgoth
中使用'元素'我認爲你的第一種方式是最好的在這種情況下。附註:我不認爲jqLite支持象'jQuery那樣''element.children'中的搜索值,但我可能在這裏是錯誤的。 –