我在开发Angular库时遇到了一个问题:angular-coq。
我试图提供这些功能:
<div ng-controller="myController">
<form coq-model="team1">
<!-- Inputs will be automatically added to form (wrapped in <p>) -->
</form>
</div>
myController
在范围team1
中公开,是一个包含2个属性的自定义类:id
,name
。
CoqModel
指令将为每个属性追加元素<input coq-model-attribute="...">
。
CoqModelAttribute
指令需要CoqModel
作为父级才能引用当前模型(此处为team1
)并将编译如下:
<div ng-controller="myController">
<form coq-model="team1">
<input type="<attribute_name>" ng-model="team1.<attribute_name>" coq-model-attribute="<attribute_name>"/>
</form>
</div>
Here is the implementation of CoqModel directive和here is the implementation of CoqModelAttribute directive(此处无法粘贴)
你会看到我&#34; double- $ compile&#34; CoqModel
指令。
如果我不这样做,生成的输入ng-model
将不会被绑定..
所以一切正常,期待&#34; double- $ compile&#34;导致ng-click
的一些问题。
在这种情况下:
<div ng-controller="myController">
<form coq-model="team1">
<input coq-model-attribute="name"/>
<br />
<input type="button" value="click me" ng-click="team1.update()" />
</form>
</div>
点击&#34;点击我&#34;将调用方法team1.update
2次..
我尝试了很多不同的重构,都未能解决这个问题...... 如果您是其中一位有角度的专家,请告诉我如何解决这个问题:)
非常感谢!
答案 0 :(得分:0)
Here is a link关于Stack Overflow上的类似问题,重要的是:
当您使用ng-repeat将指令放在同一元素上并调用$ compile(element)(scope);时,将重新编译您的元素,包括ng-repeat,从而导致ng-repeat再次运行。 / p>
也许在第二个$ compile期间,重新编译你的button元素,包括ng-click,导致ng-click运行两次。
这种硬编码的解决方案可能有用。使用问题按钮的选择器填充(selectorForYourButton),并在第二个$ compile的正上方包含此snippit。
(selectorForYourButton).removeAttr("ng-click");
这可能只是完全删除了ng-click的功能!如果是这样,请在第二个$ compile之后添加ng-click属性。
或者尝试使用
替换priority:101
指令中的coqModelAttribute
priority:1500,
terminal:true,
以避免在angular编译元素后再次编译。