如何知道角度ui-router自定义数据是否从父状态继承

时间:2014-11-27 12:19:08

标签: angularjs angular-ui angular-ui-router

我想知道状态中某个状态的数据字段是否继承自其父状态。例如,

    $stateProvider.state('parent', {
      data:{
         customData1:  "Hello",
      }
   })
   .state('parent.child', {
      data:{

      }
   });

这里,子状态(parent.child)没有定义自定义数据。它从其父(父)继承CustomData1。我想知道parent.child中的数据是否是继承的。但是我不想做像

这样的事情
if(parent.child.data.customData1==parent.data.customData1)
  {
  }

有没有其他方法可以找到这个?

1 个答案:

答案 0 :(得分:0)

我不确定,你的问题究竟是什么......我已经尝试解释它是如何运作的:

我创建了一个plunker,展示了它如何为您服务。

让我们拥有这些状态。首先是一些父母/孩子 - 孩子覆盖所有

.state('parent', {
  url: '/parent',
  templateUrl: 'tpl.html',
  controller: 'controllerParent',
  data:{
     customData1:  "Hello",
     customData2:  "World!"
  }
})
.state('parent.child', {
  url: '/child',
  templateUrl: 'tpl.child.html',
  controller: 'controllerChild',
  data:{
     customData1:  "Goodbye",
     customData2:  "Problems"
  }
});

还有一些其他的父母。 customData1在此处未更改

// Start 
.state('other', {
  url: "/other",
  templateUrl: 'tpl.html',
  controller: 'controllerParent',
  data:{
     customData1:  "Hello",
     customData2:  "Other World!"
  }
})
.state('other.child', {
  url: "/child",
  templateUrl: 'tpl.child.html',
  controller: 'controllerChild',
  data:{
     customData2:  "UI-Router!"
  }
})

所以我们可以看到,paren.child根本不匹配自定义数据,其他匹配至少是customData1。因此,如果父数据键和子数据键匹配,则此检查将始终给出答案:

  $scope.isSame = function(dataKey){
     var childData = $state.current.data;  
     var parentData = $state.$current.parent.data;  
     return childData[dataKey] === parentData[dataKey];
  };

并且那个掠夺者使用它:

 {{isSame('customData2')}}

检查here