0

我创建了这个jsfiddle:

http://jsfiddle.net/noahgoodrich/CDwfL/1/

我创建了一组指令来管理和操作导航选项卡。出于某种原因,当我尝试关闭选项卡时,它最初会删除适当的数组元素,但随后该元素被替换为空元素。打开选项卡似乎按预期工作。

  app.directive('navTabOpen', ['$parse', 'navTabsService', function($parse, navTabsService) {
    return {
      restrict: 'A',
      link: function(scope, element, attrs) {
        scope.tabs = navTabsService.tabs;

        element.bind('click', function() {
          var tab = null;
          var b = scope.$eval(attrs.navTabOpen);

          for(var i=0;i<scope.tabs.length;i++) {
            scope.tabs[i].active = null;

            if(scope.tabs[i].tabId == b.id) {
              tab = i;
            }
          }

          if(tab == null) {
            tab = {tabId: b.id, name: b.name, stage: b.status, active: 'active'};
            scope.tabs.push(tab)
          } else {
            scope.tabs[tab].active = 'active';
          }
        });
      }
    }
  }])
  .directive('navTabClose', ['$location', 'navTabsService', function($location, navTabsService) {
    return {
      restrict: 'A',
      link: function(scope, element, attrs) {
        scope.tabs = navTabsService.tabs;

        element.bind('click', function() { 
          var tab = null;
          for(var i=0;i<scope.tabs.length;i++) {
            if(scope.tabs[i].tabId == attrs.tabId) {
              tab = i;
            }
          }

          if(tab != null) {
            if(scope.tabs[tab].active == 'active') {
              if(scope.tabs.length == 1) {
                $location.path('/');
              } else if(tab == 0) {
                scope.tabs[1].active = 'active';
              } else {
                scope.tabs[tab-1].active = 'active';
              }
            }

            scope.tabs.splice(tab,1);
            console.log(scope.tabs)
          }
        });
      }
    }
  }])

谁能提供有关我如何错误使用的见解navTabsService?或者是和指令link()中的功能有关的东西?navTabOpennavTabClose

4

1 回答 1

1

在您的navTab指令中(在链接的小提琴中可见),指令模板定义了一个span嵌套在a标签中的元素。Span 元素使用navTabClose指令,而父a标记元素使用navTabOpen指令。两个指令中的链接函数都定义了一个点击处理程序。单击时会执行两个处理程序x,这会产生意外的行为。

app.directive('navTab', function () {
    return {
      restrict: 'A',
      template: '<li class="{{tab.active}} stage-{{tab.stage}}">'
                  +'<a href="/borrower/{{tab.tabId}}" nav-tab-open="{id: {{tab.tabId}}}" >{{tab.name}}'
                    +'<span class="close" nav-tab-close tab-id="{{tab.tabId}}">×</span>'
                  +'</a>'
                +'</li>',
      replace: true,
      scope: { tab: '=' }
    };
  })
于 2013-06-08T12:13:36.157 回答