带有 $state.includes 的 ng-show 有闪烁/闪烁 - 有角度; ui路由器

Posted

技术标签:

【中文标题】带有 $state.includes 的 ng-show 有闪烁/闪烁 - 有角度; ui路由器【英文标题】:ng-show with $state.includes has blink/flickering - angular; ui-router 【发布时间】:2017-04-11 10:07:27 【问题描述】:

如How to ng-hide and ng-show views using angular ui router 所述,我有以下标记:

<div class='container'>
  <div ng-show='$state.includes('state1')></div>
  <div ng-show='$state.includes('state2')></div>
</div>

在 css 中使用 flex-box:

.container 
  display: flex;
  flex-direction: column;

现在,当我在两种状态之间切换时,两个 div 都会显示为眨眼,导致丑陋的眨眼效果。

我从 Angularjs - ng-cloak/ng-show elements blink 尝试了 ng-cloak,但没有任何成功。

我不能使用 ng-if,因为我使用来自 ui-router-extras 的“粘性状态”,这需要 DOM 持久化。

【问题讨论】:

你试过用ng-animateng-show 制作动画吗?前任。 .ng-hide-add animation:0.5s showdiv ease; .ng-hide-remove animation:0.5s hideDiv ease; 默认使用备用 css 类隐藏。 &lt;div class="default-hide" ng-show="$state.includes('state1')"&gt;&lt;/div&gt;。默认隐藏应该有一个display: none,避免!important 隐藏添加延迟,但隐藏删除没有。当我将时间设置为 2 秒左右时,眨眼变成了长时间的眨眼。它显示了一个很好的解决方案,但是通过延迟隐藏删除而不是隐藏添加。只有我不能让它工作.. @MiguelLattuada 默认隐藏它根本不显示。我想尝试在 $state.includes() 上添加一个带有 ng-class 的类。看起来就像重建 ng-show.. 你找到问题了吗? 【参考方案1】:

$state 将无法在 html 中使用,因此

1) 你可以在 Ctrl 中做这样的事情

$scope.state = $state;

但我不会推荐这个

2) 在 HTML 中

<div class='container'>
  <div ng-show="showThis('state1')"></div>
  <div ng-show="showThis('state2')"></div>
</div>

在控制器中

$scope.showThis = function(type)
  return $state.includes(type);

【讨论】:

感谢您的快速响应。我使用你的第一个选项。在选项 2 中,问题仍然存在。【参考方案2】:

尽管您已经提到您已经尝试过 ng-cloak,但我认为您的问题的正确答案确实是 ng-cloak 与:

[ng\:cloak], [ng-cloak], .ng-cloak 
    display: none !important;

样式配置。 I have made an example on CodePen.io that show exaclty this solution working with Angular UI Router. 正如您在示例中看到的那样,整个视图会像您提到的那样闪烁,但是,如果您将“ng-cloak”指令添加到:

<div ng-app="myApp">

然后会变成:

<div ng-app="myApp" ng-cloak>

你会看到Angular protects the view from being showed (blinking). 这正是'ng-cloak'指令的目的。

希望这个例子能帮助你解决问题。

【讨论】:

感谢 CodePen。可悲的是它不起作用。当我在 Pen 中删除 ng-cloak 时,我也没有看到任何闪烁..【参考方案3】:

您可以使用 ng-style 来去除闪烁效果。

<div class='container'>
    <div ng-style="'display': $state.includes('state1') ? 'block' : 'none'"></div>
    <div ng-style="'display': $state.includes('state2') ? 'block' : 'none'"></div>
</div>

我不确定为什么 ng-show 会触发带有粘性状态的闪烁效果,但这种解决方法可以解决问题。

【讨论】:

以上是关于带有 $state.includes 的 ng-show 有闪烁/闪烁 - 有角度; ui路由器的主要内容,如果未能解决你的问题,请参考以下文章

微软这个开源项目碉堡了!草图秒变HTML代码

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName

使用带有 uuencode 的“sendmail”发送邮件,并带有主题

带有和不带有聚合的 sql 查询

带有滚动的 Div 和带有绝对位置的内容

带有 RecyclerView 的 DialogFragment 比带有 Recyclerview 的 Fragment 慢