我想使用自定义指令创建UI。 我这样做:
指令:
module.directive('testData', function() {
return {
templateUrl: 'template/mainTemplate.html'
};
});
模板:
<form class="class">
<div ng-repeat='mainJson in mainJsonData'>
<div class='mainJson.divClass'>
<input type="{{mainJson.inputType}}" class="{{mainJson.inputClass}}" placeholder="{{mainJson.placeHolder}}" maxlength='{{mainJson.inputMaxLength}}' ng-model="mainJson.name"/>
</div>
</div>
JSON数据
[
{"divClass":"form-group","inputType":"text","inputClass":"form-control","inputNgModel":"name","inputMaxLength":"10","placeHolder":"Name"},
{"divClass":"form-group","inputType":"text","inputClass":"form-control","inputNgModel":"city","inputMaxLength":"10","placeHolder":"city"},
{"divClass":"form-group","inputType":"text","inputClass":"form-control","inputNgModel":"mobile","inputMaxLength":"10","placeHolder":"mobile"}
]
但是在模板中,ng-model无法正常工作。它创建UI为:
<input type="text" ng-model="mainJson.inputNgModel" maxlength="10" placeholder="Name" class="form-control">
哪个不对。它应该是:
<input type="text" ng-model="name" maxlength="10" placeholder="Name" class="form-control">
答案 0 :(得分:0)
检查此工作plunkr
这就是你需要的:
<input ng-model="mainJson[mainJson.inputNgModel]" />
只需将ng-model绑定到数组mainJson.inputNgModel
的属性值mainJson
的对象引用。
这里要明白的是,如果你知道要访问的数组的属性,你可以这样做:
var getProperty = arr.thisPropertyIKnow;
如果要动态获取属性名称,请执行以下操作:
var thisPropertyIDontKnow = 'valueAtRunTime';
var getProperty = arr[thisPropertyIDontKnow];
完整的插图模板。
<form class="class">
<p>Inside directive</p>
<div ng-repeat='mainJson in mainJsonData'>
<div class="{{mainJson.divClass}}">
<input ng-model="mainJson[mainJson.inputNgModel]" type="{{mainJson.inputType}}" class="{{mainJson.inputClass}}" placeholder="{{mainJson.placeHolder}}" maxlength='{{mainJson.inputMaxLength}}' />
</div>
<p>value of ng-model is : {{mainJson.inputNgModel}}</p>
<p>Dipplay the value inside the input field: {{mainJson[mainJson.inputNgModel]}}</p>
</div>
</form>
此外,在您的指令中,您需要初始化数组:
app.directive('testData', function() {
return {
templateUrl: 'mainTemplate.html',
controller: function($scope) {
$scope.mainJsonData = [{
"divClass": "form-group",
"inputType": "text",
"inputClass": "form-control",
"inputNgModel": "name",
"inputMaxLength": "10",
"placeHolder": "Name"
}, {
"divClass": "form-group",
"inputType": "text",
"inputClass": "form-control",
"inputNgModel": "city",
"inputMaxLength": "10",
"placeHolder": "city"
}, {
"divClass": "form-group",
"inputType": "text",
"inputClass": "form-control",
"inputNgModel": "mobile",
"inputMaxLength": "10",
"placeHolder": "mobile"
}];
}
};
});