【发布时间】:2015-03-31 07:03:53
【问题描述】:
我正在使用具有以下自定义属性指令的第三方库:
angular.directive('snapDrawer', function () {
'use strict';
return {
restrict: 'AE',
...
因此,如果在 HTML 元素中找到属性“snap-drawer”,则指令实现会匹配并触发,例如:
<div snap-drawer></div>
我正在使用 Angular 1.3,它对 ng-attr 具有“AllOrNothing”方法,如果值条件未定义,则属性不会像这样呈现:
<div ng-attr-snap-drawer="{{data.addSnapDrawer}}"></div>
100% 事实如此,我的控制器中 data.addSnapDrawer 的值是未定义的,并且 snap-drawer 属性不会在 DOM 中呈现
我已经验证 Angular 1.3 在这里使用 ng-attr 执行 AllOrNothing 方法:What is the best way to conditionally apply attributes in Angular?(看看 Mathew Foscarini 的回答)
但是在 DOM 中呈现的是:
<div ng-attr-snap-drawer="{{data.addSnapDrawer}}" class="snap-drawer snap-drawer-left" style=""></div>
因此,令人难以置信的是,angular.directive('snapDrawer') 与“ng-attr-snap-drawer”匹配。怎么会这样,我真的很震惊 AngularJS 在它的所有荣耀中都有这样的错误。
我在网上找不到任何东西。我无法设置 snap-drawer="false" 我需要它不会出现在 DOM 中,这是我通过从 Angular 1.2 升级到 1.3 实现的。
【问题讨论】:
-
创建新自定义属性时的一般规则是不要使用前缀 ng 命名它,因为 angularjs 的更高版本可能具有相同的名称。
-
这就是这个问题如此令人困惑的地方,我的自定义属性名为“snapDrawer”,没有 ng 前缀,请参阅我的问题中的 angular.directive。 Angular 匹配“ng-attr-snap-drawer”的“snap-drawer”部分,并且“ng-attr-snap-drawer”有条件地用于渲染“snap-drawer”属性
-
你能不能在 snap-drawer 前面加上一些其他的自定义词,比如 Brian-snap-drawer。
-
不,snap-drawer 是第三方库的一部分,所以我想避免在更新该库时会破坏的更改。 snap-drawer 必须是自定义属性名称,谢谢
-
“所以,令人难以置信的是,angular.directive('snapDrawer') 与“ng-attr-snap-drawer”匹配。这怎么可能,我真的很震惊 AngularJS,在它的所有荣耀中,都有一个像这样的错误。” 这不正是documentation says it should do 的内容吗? (虽然我在查找与版本相关的文档时遇到问题)
标签: javascript angularjs