我想将on-drag-start
用作AngularJS指令中的一个属性,名为ngDraggable
。
但是,似乎不可能拥有该属性。
以下代码使用的是纯JavaScript,我可以将on-drag-start
作为属性。
我想我可以获得任何属性而不管属性名称。
<h1 id="tag1" on-drag-start="START" on-drag="DRAG" on-drag-end="END" >Hello Plunker!</h1>
纯javasctipt DEMO中的属性:http://plnkr.co/edit/6iODSnf56KtwPFpoC7ck?p=preview
但是,在AngularjS的以下代码中,我无法将onDragStart
作为属性,但可以将onDragBegin
作为属性。
<h1 id="tag1" ng-draggable on-drag="DRAG" on-drag-end="END"
on-drag-start="START" on-drag-begin="BEGIN">Hello Plunker!</h1>
AngularJS指令DEMO中的属性:http://plnkr.co/edit/RxABAHHlxQJSSZz91CYW?p=preview
当然,我可以将我的属性名称从on-drag-start
更改为on-drag-begin
,但我很好奇。
我的问题是;
on-drag-start
作为属性名称? 注意:我觉得我的问题格式不正确。欢迎重写。
答案 0 :(得分:6)
This was broken in 1.2。最好将属性重命名为其他内容并继续前进。
答案 1 :(得分:0)
我今天遇到了这个问题,我浪费了一个小时左右的时间试图找出我的指令有什么问题。我正在实现一个触摸事件指令,并将其命名为dac-touch-start
,并且感到困惑,为什么它没有触发。最终我发现了“#34; start&#34;是责备。
通过Angular来源,似乎有一个特殊的条款&#34; start&#34;和&#34;结束&#34;在指令名称中。
这是将模板中的指令链接到指令定义的函数。
/**
* Looks for directives on the given node and adds them to the directive collection which is
* sorted.
*
* @param node Node to search.
* @param directives An array to which the directives are added to. This array is sorted before
* the function returns.
* @param attrs The shared attrs object which is used to populate the normalized attributes.
* @param {number=} maxPriority Max directive priority.
*/
function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) {
...
var directiveNName = ngAttrName.replace(/(Start|End)$/, '');
if (ngAttrName === directiveNName + 'Start') {
attrStartName = name;
attrEndName = name.substr(0, name.length - 5) + 'end';
name = name.substr(0, name.length - 6);
}
这似乎可以支持ng-repeat-start
... ng-repeat-end
等指令。
正如@mmattax建议的那样,要做的就是将其命名为其他东西。
答案 2 :(得分:0)
所以, coughcough 似乎附加一个无聊的(额外的)启动是一种解决方法。
即。 on-drag-start-start="onStartCallback()"
。
会在标记中产生on-drag-start属性, 它似乎工作,角度1.2.10。
您的里程可能会有所不同,我也没有检查过任何其他不当行为。