有条件地应用属性(AngularJS)

时间:2014-11-04 13:22:16

标签: javascript angularjs attributes conditional

问题是,当我尝试有条件地应用' has-dropdown'属性,我得到以下角度转换错误:

错误:[$ compile:ctreq]指令' ngTransclude'所需的控制器' hasDropdown'无法找到! 它引用了angular.js第9563行

。我试图应用的逻辑是:

  • 如果subNav数组为空,则不显示' has-dropdown'元素中的属性。
  • 如果它不为空,则添加' has-dropdown'属性。

我遗失的任何东西?

 <code>
<li ng-repeat="nav in app.mainNavItems" 

 {{app.mainNavItems.subNavs.length > 0 ? "has-dropdown" : ""}}>  
 </code>

1 个答案:

答案 0 :(得分:0)

你不能这样做。您应该创建一个指令,在编译阶段应该检查是否app.mainNavItems.subNavs.length > 0并使用$element.attr('has-dropdown')添加属性

这样的事情:

var myModule = angular.module(...);

myModule.directive('directiveName', function($parse) {
    return {
        restrict: 'A',
        compile: function compile(tElement, tAttrs, transclude) {
             if($parse(tAttrs.directiveName)()) {
                 tElement.attr('has-dropdown');
             }
        }
    };
});

模板:

<li ng-repeat="nav in app.mainNavItems" directive-name="app.mainNavItems.subNavs.length > 0">

注意:没有经过测试,只是从头顶开始..