angularjs指令无法获取以“-start”结尾的属性

时间:2014-01-20 19:25:22

标签: angularjs angularjs-directive

我想将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,但我很好奇。

我的问题是;

  1. 为什么我不能使用on-drag-start作为属性名称?
  2. 背后的原因是什么?
  3. 并且,属性名称是否有任何一般规则?
  4. 注意:我觉得我的问题格式不正确。欢迎重写。

3 个答案:

答案 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。

您的里程可能会有所不同,我也没有检查过任何其他不当行为。