【问题标题】:angular js directive - How to evaluate angular tags of directive's template htmlangular js 指令 - 如何评估指令模板 html 的角度标签
【发布时间】:2013-05-17 11:21:36
【问题描述】:

我有一个指令,我想使用属性来控制他的行为。它是一个导航栏,应该有一个活动项,具体取决于属性的值

<navbar active="programs"></navbar>

指令的模板

<div class="navbar span12">
<div class="navbar-inner">
    <div class="container-fluid">
        <a class="brand" href="#">Loopz</a>
        <ul class="nav">
            <li ng-class="{active: isActive('programs')}"><a href="#/programs">Programs</a></li>
            <li ng-class="{active: isActive('shop')}"><a href="#/shop">Shop</a></li>
            <li ng-class="{active: isActive('profile')}"><a href="#/profile">Profile</a></li>
        </ul>
    </div>
</div>

active 类应该放在具有匹配active 属性值的元素上。应该评估模板并且指令的内部范围应该有一个函数,该函数将active 属性的值与传递给指令范围方法isActive(value)的值相匹配@

指令

directivesModule.directive('navbar', function(){
    return {
        restrict: "E",
        templateUrl: "partials/navbar.html",
        replace: true,
        controller: function($scope, $element, $attrs){
            $scope.isActive = function(value){
                return $attrs.active === value;
            }
        }
    }
});

正在使用正确的值调用 isActive 函数,但 $attrs 对象不包含 active 属性的值。

【问题讨论】:

    标签: angularjs angularjs-directive angularjs-scope


    【解决方案1】:

    我刚刚将你所有的代码放到了一个 jsFiddle 中(如果你下次这样做会很有帮助)并且一切似乎都正常:http://jsfiddle.net/rtCP3/110/

    这是应该激活的 li 的输出:

    <li ng-class="{active: isActive('programs')}" class="active">
        <a href="#/programs">Programs</a>
    </li>
    

    【讨论】:

    • jsFiddle 确实有效。我还应该提到,我在由 ng-view 加载的部分 html 中使用了这个指令。我将尝试修改 jsFiddle 以模仿设置
    • 我知道发生了什么。该指令的控制器范围继承自已具有 isActive 方法的父范围。重命名指令范围中定义的方法后,一切都按预期工作。我宁愿不让指令的范围继承父级的范围。指令文档引用了“隔离”范围,这听起来像是我应该在这种情况下使用的东西。
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 2013-11-25
    • 2014-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多