且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Navigator和导航栏之间的区别以及用法场景的分析

更新时间:2022-02-05 00:58:40

区别:

   1.navigator是属于小程序组件中的,导航栏是属于小程序API中的

   2.navigator组件是用在axml页面中跳转的导航,它有4种类型(见下表);导航栏API是用在js中实现页面跳转的

   3.navigator是通过给属性open-type赋值的方法来实现其对应的跳转功能,导航栏是通过封装好的API中方法(如下表)实现其对应的功能

 

关联:

navigator的属性open-type对应导航栏API中的相应功能,参考该表理解  

      navigator(open-type)               导航栏
      navigate(默认值)        对应my.navigateTo的功能
      redirect        对应my.redirectTo的功能
      switchTab        对应my.switchTab的功能 
      navigateBack        对应my.navigateBack的功能

 

建议:

如果需要在跳转做其他逻辑处理建议使用导航栏API,不做的话建议使用navigator组件

 

用法场景:

1.my.navigateTo:

保留当前页面,跳转到应用内的某个指定页面,路径后可带参数,参数规则如下:路径与参数之间使用?分隔,参数键与参数值用=相连,不同参数必须用&分隔;如 path?key1=value1&key2=value2

使用 my.navigateBack 可以返回到原页面;页面最大深度为10,即可连续调用 10 次 navigateTo

示例代码:

my.navigateTo({
  url: 'new_page?count=100'
})

 

2.my.redirectTo:

关闭当前页面,跳转到应用内的某个指定页面,路径后可带参数,参数规则如下:路径与参数之间使用?分隔,参数键与参数值用=相连,不同参数必须用&分隔;如path?key1=value1&key2=value2

示例代码:

my.redirectTo({
  url: 'new_page?count=100'
})

 

3.my.switchTab:

跳转到指定 tabBar 页面,并关闭其他所有非 tabBar 页面;跳转的页面的路径需要在app.json的tabBar中声明的页面且路径后不能带参数

示例代码:

// app.json
{
  "tabBar": {
    "items": [{
      "pagePath": "home",
      "name": "首页"
    },{
      "pagePath": "user",
      "name": "用户"
    }]
  }
}
my.switchTab({
  url: '/home'
})

 

4.my.navigateBack:

关闭当前页面,返回上一级或多级页面。可通过 getCurrentPages 获取当前的页面栈信息,决定需要返回几层;返回的页面数,如果 delta 大于现有页面数,则返回到首页

示例代码:

// 注意:调用 navigateTo 跳转时,调用该方法的页面会被加入堆栈,
// 而 redirectTo 方法则不会。见下方示例代码

// 此处是one页面
my.navigateTo({
  url: 'two?pageId=10000'
})

// 此处是two页面
my.navigateTo({
  url: 'one?pageId=99999'
})

// 在three页面内 navigateBack,将返回one页面
my.navigateBack({
  delta: 2
})

my.navigateTo 和 my.redirectTo 不允许跳转到 tabbar 页面;如果需要跳转到 tabbar 页面,请使用 my.switchTab

 

5.my.reLaunch:

关闭当前所有页面,跳转到应用内的某个指定页面。如果页面不为 tabbar 页面则路径后可以带参数。参数规则如下:路径与参数之间使用?分隔,参数键与参数值用=相连,不同参数必须用&分隔;如path?key1=value1&key2=value2

示例代码:

my.reLaunch({
  url: '/page/index'
})

 

6.my.setNavigationBar:

设置导航栏文字及样式,导航栏底部边框颜色,支持十六进制颜色值。若设置了 backgroundColor,则borderBottomColor 不会生效,默认会和 backgroundColor 颜色一样

示例代码:

my.setNavigationBar({
  title: '你好',
  backgroundColor: '#108ee9',
  success() {
    my.alert({
      content: '设置成功', 
    });
  },
  fail() {
    my.alert({
      content: '设置是失败',
    });
  },
});

 

7.my.showNavigationBarLoading:

显示导航栏 loading

示例代码:

my.showNavigationBarLoading();

 

8.my.hideNavigationBarLoading:

隐藏导航栏 loading

示例代码:

my.hideNavigationBarLoading();