javascript - AngularJS 解析插值属性

标签 javascript angularjs angularjs-directive

我有一个如下所示的侧边栏指令:

<div id="sidebar-wrapper">
  <ul class="sidebar">
    <li class="sidebar-main">
      <a ng-click="toggle()">
        {{currentState.stateTitle}}
        <span ng-model="currentState.data.stateTitle"></span>
        <span class="menu-icon glyphicon glyphicon-transfer"></span>
      </a>
    </li>
    <!--<li class="sidebar-title"><span>NAVIGATION</span></li>-->
    <li ng-repeat="item in menu.items" class="sidebar-list">
      <a activable ui-sref="{{item.url}}">{{item.title}}<span
        class="menu-icon fa {{item.icon}}"></span></a>
    </li>
  </ul>
</div>

用它的 JS:

angular.module('common.directives.sidebar', [
    'ui.bootstrap',
    'common.services.navigation'
])

    .directive('sidebar', function ($rootScope, $timeout) {
        return {
            restrict: 'E',
            scope: {
                id: '=',
                onToggle: '&',
                isLocked: '@?'
            },
            templateUrl: 'directives/sidebar/sidebar.tpl.html',
            controller: function ($scope, navigation) {

                $scope.currentState = navigation.getCurrentState();
                $scope.menu = navigation.getMenu();

                $scope.toggle = function () {
                    $scope.onToggle();
                    $timeout(function onAnimationDone() {
                        $rootScope.$broadcast('sidebar:resize');
                    }, 400);
                };
            }
        };
    })

我想添加另一个指令,当当前状态是它们的状态时“启用”链接,我做了这样的事情:

.directive('activable', [function () {
        return {
            restrict: 'A',
            link: function (scope, element, attributes) {
                var state = element[0].getAttribute('ui-sref');
                scope.$on('$stateChangeSuccess', function (event, toState, toParams, fromState, fromParams) {
                    if (~toState.name.indexOf(state)) {
                        element.addClass('active');
                    } else {
                        element.removeClass('active');
                    }
                });
            }
        };
    }])

问题是,当我尝试获取“url”属性时,我得到非插值:{{item.url}},我该如何获取插值?

最佳答案

您可以使用 $interpolate 插入属性服务:

var state = element[0].getAttribute('ui-sref');
var exp = $interpolate(state);

然后计算 exp 以获得一个值:

var url = exp(scope);

关于javascript - AngularJS 解析插值属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30320359/

相关文章:

html - Angular 路由发生了奇怪的事情

javascript - 最初不检查单选按钮

javascript - Flot折线图问题

javascript - 第一个响应中缺少 Access-Control-Allow-Origin

javascript - Dropzone.js 显示存储的图像

javascript - 防止输入任何附加字符

angularjs - 从 ng-grid 获取选择行?

javascript - 同一字段中的 Angular 下拉菜单和文本输入以及 Angular 数据绑定(bind)

javascript - 如何从js函数中获取值

javascript - 使用 CSS 和 JS 的 Web 应用程序的 flex 菜单