家伙! 我从动态数据构建表单。在将来,我需要编译此表单,将数据放入表单并提交。我通过这种方式建立形式:
<div>
<form name="pageForm">
<div>
<div class="form-group" ng-repeat="item in formStructure.form_data"
dynamic="item" templates="templates"></div>
</div>
</form>
</div>
我在js代码中有表单部件/输入的模板,如下所示:
$scope.templates.checkbox = '<label><input ng-required="item.conf.required"' +
'ng-model="formData[item.conf.name]" type="checkbox" > {{item.conf.title}} </label>';
并使用这样的指令:
function dynamic ($compile) {
return {
restrict: 'A',
replace: true,
scope: { dynamic: '=dynamic',
templates: '=templates',
eventlstn: '&'
},
link: function postLink(scope, ele, attrs) {
scope.$watch( 'dynamic' , function(html){
scope.item = html;
ele.html(scope.templates[html.type]);
$compile(ele.contents())(scope);
});
}
};
}
在表单被填充之后,当我点击一些元素时,用ng-click =&#34; someFunctionINController()&#34;什么都没有。
同样在我的HTML上,我无法使用ng-model访问表单数据。
答案 0 :(得分:0)
我找到了解决方案: 我修改了指令:
function dynamic ($compile) {
return {
restrict: 'AE',
replace: true,
scope: false,
link: function postLink(scope, ele, attrs) {
scope.$watch( 'dynamic' , function(){
ele.html(scope.templates[scope.item.type]);
$compile(ele.contents())(scope);
});
}
};
}
使用scope: false
指令与控制器使用相同的范围。
现在它有效。谢谢,Grundy为你的时间。
将来我计划将这个解决方案(拖动&#39; n&#39; Drop表单构建器具有扩展功能)公开,希望它能帮助某人。