我敲我的头挂在墙上在这个好几天,最后决定发布这个问题,因为我无法找到答案符合我想要做的事。
背景:我建立一个动态的形式建立的平台,描述了JSON结构形式元素这样的 -
{
"name": "email",
"type": "email",
"text": "Your Email",
"model": "user.profile.email"
}
然后在视图我有一个递归NG重复,包括这样的字段模板 -
<script type="text/ng-template" id="field.html">
<div ng-if="field.type === 'email'" class="{{field.class}}">
<p translate="{{field.text}}"></p>
<input type="{{field.type}}" name="{{field.name}}" class="form-control" dyn-model="{{field.model}}">
</div>
</script>
正如你看到的,我使用自定义指令dynModel创建与字符串值模型的插值的NG-model属性。 到目前为止,做的好。
现在我有一个更复杂的场景中,我有一个可以通过点击添加按钮或removeMe按钮来添加或删除字段的集合。 见下文 -
{
"name": "urls",
"type": "collection",
"text": "Your Profile URLs",
"model": "user.profile.urls",
"items": [
{
"name": "url",
"type": "url",
"text": "Facebook URL",
"model": "url"
},
{
"name": "url",
"type": "url",
"text": "Facebook URL",
"model": "url"
}
],
"action_button": {
"name": "add",
"type": "action",
"action": "addURL"
}
}
<div ng-if="field.type === 'collection'">
<button class="btn btn-info" dyn-click click-action="{{field.action_button.action}}" click-model="{{field.model}}">{{field.action_button.text}}</button>
<div dyn-ng-repeat="item in {{field.model}}" >
<div ng-repeat="field in field.items" ng-include src="'field.html'"></div>
</div>
</div>
正如你会发现,我还有一个自定义的指令,它利用插值照顾{{field.model}}从以前的NG-重复(未显示)。
现在到了问题的关键所在。 当你在模板中看到的,我有嵌套NG-重复,通过user.profile.urls第一个迭代,第二个迭代通过JSON的现场参数,创建HTML标记,等其中的一个领域是一个按钮用来多个URL添加到列表(action_button)。 当我按一下按钮,我希望它引发我的控制器的功能,有效地增加一个新的子父模型(user.profile.urls)。 然后我也希望每个URL,现有的和新的,以旁边有一个删除按钮,这将是动态的,会从模型中删除特定项目。
如果你看到上面的代码中,我有一个自定义指令DYN-点击,在读
click-action="{{field.action_button.action}}"
这包含了函数名(addURL)被称为驻留在我的控制器和模型
click-model="{{field.model}}"
(user.profile.urls),以该新产品被添加。 这是行不通的。 这样做的原因复杂的是,我有多层嵌套,并在每个级别有需要进行插值和约束动态元素。 该指令DYN-点击貌似现在这种权利 -
exports = module.exports = function (ngModule) {
ngModule.directive("dynClick",function() {
return {
restrict: 'A',
link: function(scope,element,attrs) {
$(element).click(function(e, rowid){
scope.clickAction(scope.clickModel, scope.$index);
});
}
};
});
};
有了这个代码,当我所再现的形式的添加按钮,单击,在$(元素)。单击方法上面的代码被执行给下面的错误 -
遗漏的类型错误:未定义是不是一个函数
在DYN-点击指令{},用不同的错误,他们都没有与模型的双向绑定和调用函数如预期完全工作:我曾尝试与范围一些不同的东西。
救命!
编辑-1 - 请评论:
$(element).click(function(e, rowid){
scope.$eval(attrs["clickAction"])(scope.$eval(attrs["clickModel"]), scope.$index);
});
编辑-2:plunker在这里- http://plnkr.co/edit/DoacjRnO61g4IYodPwWu?p=preview 。 仍在调整它得到它的权利,但你们应该能够看到必要的部分。 谢谢!
编辑-3:谢谢塞巴斯蒂安。 新plunker在这里- http://plnkr.co/edit/Z6ViT7scubMxa17SFgtx?p=preview 。 与field.items NG-重复的问题依然存在。 出于某种原因,没有被执行的内部NG重复。 有任何想法吗? 何塞普,塞巴斯蒂安?