Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS+;UI路由器:查看href或UI sref是否与状态匹配_Angularjs_Angular Ui Router - Fatal编程技术网

AngularJS+;UI路由器:查看href或UI sref是否与状态匹配

AngularJS+;UI路由器:查看href或UI sref是否与状态匹配,angularjs,angular-ui-router,Angularjs,Angular Ui Router,所以目前,我使用UI路由器来管理一组选项卡指令。通过选项卡,我指的是这个UI范例: 每个选项卡都可以有一个与之关联的标题、一个图标、一个href或ui sref 例如: <my-tabs> <my-tab title="Tab 1" href="#/tab1"> Content when tab 1 is active! </my-tab> <my-tab title="Tab 2" ui-sref="tabs.numberTwo()

所以目前,我使用UI路由器来管理一组选项卡指令。通过选项卡,我指的是这个UI范例:

每个选项卡都可以有一个与之关联的
标题
、一个
图标
、一个
href
ui sref

例如:

<my-tabs>
  <my-tab title="Tab 1" href="#/tab1">
    Content when tab 1 is active!
  </my-tab>
  <my-tab title="Tab 2" ui-sref="tabs.numberTwo()">
    Content when tab 2 is active!
  </my-tab>
</my-tabs>
欢迎有任何这样做的想法

签出下一个方法:

  • is()
  • contains()
  • includes()

    • 所以我终于让它工作了,谢谢大家

      我检查attrs.href的$location.href(),并拆分sref以获取attrs.uiSref的stateName

      分手是不可取的,但这是我现在能找到的最好的了

      $rootScope.$on('$stateChangeSuccess', selectTabIfMatchesState);
      function selectTabIfMatchesState() {
        //get rid of leading # if it exists, to match against $location.path()
        var href = $attr.href && $attr.href.replace(/^#/, '');
      
        //uiSref is laid out as 'stateName({params})', get only 'stateName'
        var stateName = $attr.uiSref && $attr.uiSref.split('(')[0];
      
        var includesState = stateName && $state.includes(stateName);
        var includesHref = href && $location.path().indexOf(href) === 0;
      
        if (includesHref || includesState) {
          // this tab matches current state, go to it!
          tabsCtrl.select($scope);
        }
      }
      

      问题是我没有一个真正的州名来匹配;我要么有一个ui sref(这是一个函数),要么有一个href——我都不能使用这些方法来匹配它们<代码>$state.is('/some/url'),
      $state.is('someState({param:value}'))
      ,等等将无法使用$state.is。是否正确:
      $state.is('admin.website',{siteId:1})
      您能从window.location获取所需的内容吗?@drex排序-不过问题还有另一层。如果用户处于子状态,该怎么办?例如,该选项卡打开“列表”状态的ui视图,但导航到“列表详细信息”状态?我想我可以检查位置,知道它“包含”列表状态,然后激活它,里面的ui视图将呈现子状态。。。我试试看,谢谢。@drex你知道有没有办法从ui-sref属性中获取带有参数的状态?然后我可以对ui sref做同样的操作。ui路由器是否公开了它们在服务或类似服务中内部执行的方式?我会深入研究源代码,但目前没有时间。ui-sref实际上不支持动态值。它“起作用”的事实是意想不到的副作用。啊。。。如果能在小提琴/弹琴上看到一个工作的例子,那就太好了。你能再加一个例子吗
      $rootScope.$on('$stateChangeSuccess', selectTabIfMatchesState);
      function selectTabIfMatchesState() {
        //get rid of leading # if it exists, to match against $location.path()
        var href = $attr.href && $attr.href.replace(/^#/, '');
      
        //uiSref is laid out as 'stateName({params})', get only 'stateName'
        var stateName = $attr.uiSref && $attr.uiSref.split('(')[0];
      
        var includesState = stateName && $state.includes(stateName);
        var includesHref = href && $location.path().indexOf(href) === 0;
      
        if (includesHref || includesState) {
          // this tab matches current state, go to it!
          tabsCtrl.select($scope);
        }
      }