angularjs - 根据范围变量显示 ion-nav-buttons 位置

标签 angularjs ionic-framework

我有一个在 LTR 或 RTL 模式下工作的应用程序,我试图更新菜单以反射(reflect)方向,所以这就是我所做的:

<ion-view  id="home"  hide-back-button="true">

    <ion-nav-title>
        <img ng-src="{{logo_path}}" class="header-logo"/>
    </ion-nav-title>

    <ion-nav-buttons side="{{ (is_rtl) ? 'right' : 'left' }}">
        <button menu-toggle="{{ (is_rtl) ? 'right' : 'left' }}" class="button button-icon icon ion-navicon"></button>
    </ion-nav-buttons>

    <ion-content class="has-header">
       ...
    </ion-content>
</ion-view>

is_rtl是 Controller 中设置的用于了解方向的变量。问题是这没有任何效果。似乎 ionic 没有解析侧面部分的变量。手动输入向右或向左工作正常,但看起来不像可以动态工作。我什至尝试过 ng-if 但没有成功:

<ion-view  id="home"  hide-back-button="true">

    <ion-nav-title>
        <img ng-src="{{logo_path}}" class="header-logo"/>
    </ion-nav-title>


    <ion-nav-buttons side="left" ng-if="!is_rtl">
        <button menu-toggle="left" class="button button-icon icon ion-navicon"></button>
    </ion-nav-buttons>

    <ion-nav-buttons side="right" ng-if="is_rtl">
        <button menu-toggle="right" class="button button-icon icon ion-navicon"></button>
    </ion-nav-buttons>

  <ion-content class="has-header">

我该如何解决这个问题?

谢谢。

更新 1

我注意到第二次尝试使用 ng-if 部分有效,但仅当我导航到屏幕并返回主屏幕时,它在初始加载时不起作用。

最佳答案

简单说明一下,ion-nav-buttons指令必须ion-view 的第一个后代让它发挥作用。来自文档:

Note that ion-nav-buttons must be immediate descendants of the ion-view or ion-nav-bar element (basically, don’t wrap it in another div).

从源代码来看side属性没有被插值,所以无论你做什么,它总是会解析为你传递的 html。这是snippet来自他们的编译函数

var side = 'left';

if (/^primary|secondary|right$/i.test(tAttrs.side || '')) {
    side = tAttrs.side.toLowerCase();
}

意思是tAttrs.side将等于 "{{is_rtl}}"而不是实际的 bool 值。

而且看起来 ng-[if|show] 在这里不起作用,因为指令的生命周期是由 $ionNavBarController 处理的。在初始化时。

简而言之,您目前无法使用 ion-nav-button 功能。但是,您可以通过设置隐藏的导航栏 <ion-view hide-nav-bar="true"> 来实现它。然后在自定义ion-header-bar中设置您的控件像这样:

<ion-header-bar>
    <div class="buttons" ng-class="{'buttons-right': is_rtl}">
        <span ng-class="{'right-buttons': is_rtl}">
            <button class="button button-clear">
                Right button block
            </button>
        </span>
     </div>
</ion-header-bar>

关于angularjs - 根据范围变量显示 ion-nav-buttons 位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38937432/

相关文章:

javascript - 选择某些值时向 div 添加类

javascript - 相关 PhoneGap、AngularJs、Ionic、Bootstrap、Jasmine、Grunt、Bower。

javascript - ng-options 作为指令参数

angular - 测试 ModalController Ionic 3 spyOn 方法未调用

javascript - sqlite 选择的数据没有显示给 ng-repeat

javascript - 无法在 Express 上的 NodeJS 服务器中发布参数 id

angularjs - 如何使用 ionic 实现评级星级

javascript - 如果在 ng-repeat 中至少选中一个复选框,则设置按钮验证

javascript - 选择模板中的 DOM 元素

asp.net-mvc - Angular http get 在额外的引号中返回字符串