优维低代码:Redirect 路由重定向&If 条件渲染

EASYOPS_youwei · · 1833 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

 

 

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。

连载第三十期

《高级指引:Redirect 路由重定向&If 条件渲染》

1.Redirect 路由重定向

可以为指定路由设置重定向目标,该目标可以设置为固定目标,也可以设置为一个 Resolvable 的目标(即通过类似 useResolves 的机制动态计算得到):

# 固定目标

例如对于以下路由配置:

path: "${APP.homepage}"
exact: true
redirect: "${APP.homepage}/product"

当用户访问该应用首页时,将自动重定向到 /product 子页面去。

# Resolvable 目标

又如以下使用 Resolvable 目标的路由配置:

path: "${APP.homepage}"
exact: true
redirect:
  useProvider: "your-provider"
  transform:
    redirect: "${APP.homepage}/product/@{productId}"

当用户访问该应用首页时,系统将调用 your-provider 的 resolve 方法,将计算得到的 productId 拼装成 /product/@{productId} 作为跳转目标。

注意:当使用 Resolvable 目标时,应始终返回一个 { redirect?: string } 的对象,当返回的 redirect 属性为 falsy 值时,系统将忽略重定向,继续执行子路由的匹配或构件列表的渲染。

2.If 条件渲染

有些场景下,我们希望 Storyboard 可以根据特性开关或其它动态数据进行特定配置,例如根据用户权限决定使用哪些构件/路由。

# 普通条件

例如对于以下构件配置:

bricks:
  - if: '<% !!FLAGS["your-feature"] %>'
    brick: your-brick-a
  - if: '<% !FLAGS["your-feature"] %>'
    brick: "your-brick-b"

当特性开关 your-feature 打开时,将显示构件 your-brick-a,反之则显示 your-brick-b。

Tips: 从 brick_next: 1.27.4 开始,if 表达式不再要求必须返回 boolean 值,平台将自动做类型转换。

当使用参数注入或 transform 时,应确认最终得到一个 `boolean` 值,例如在求值占位符中可以使用取反运算符 `!!someValue`,在注入占位符中使用 `| bool` 或 `| not`,因为平台仅在识别到 `if: false` 时才跳过渲染。

# Resolvable 条件

当条件需要请求服务端接口或需要更复杂的逻辑计算得到时,可以使用 Resolvable 条件(类似 useResolves 的机制):

bricks:
  - if:
      useProvider: "your-permission-provider"
      transform:
        if: "@{permOfUpdateTools | bool}"
    brick: "your-brick-a"
  - if:
      useProvider: "your-permission-provider"
      transform:
        if: "@{permOfUpdateTools | not}"
    brick: "your-brick-b"

当系统渲染时,如果 your-permission-provider 返回的对象中的 permOfUpdateTools 为 true 时,页面将显示 your-brick-a 构件,反之将显示为 your-brick-b。

注意:当使用 Resolvable 条件时,应始终返回一个 { if?: boolean } 的对象。


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1833 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传