cs3230524
V2EX  ›  Vue.js

绑定的属性必须提前声明么?

  •  
  •   cs3230524 · May 10, 2020 · 3429 views
    This topic created in 2371 days ago, the information mentioned may be changed or developed.
    如果我单向绑定只做展示,有没有不提前声明就能渲染模板的方法?现在模板和填充的数据都有可能是动态的,不能提前声明出来。大家怎么处理这个需求的?
    13 replies  •  2020-06-04 10:46:16 +08:00
    cydysm
    cydysm
    May 10, 2020 via iPhone
    1
    computed ?
    shintendo
    shintendo
    May 10, 2020
    2
    想象不出“不能提前声明”的场景,能举个例子么
    gouflv
    gouflv
    May 10, 2020 via iPhone
    3
    对象内部的属性可以动态添加
    cs3230524
    cs3230524
    OP
    May 10, 2020
    4
    @shintendo 例如我有许多报告要打印,这些报告模板是后台维护的,报告的字段是用户定义的,所以是动态的。
    rabbbit
    rabbbit
    May 10, 2020
    5
    如果是指 data 里的属性的话, 可以用 Vue.set 方法
    cs3230524
    cs3230524
    OP
    May 10, 2020
    6
    换个方法吧,有没有办法让 data 里不存在的属性在模板渲染的时候不报错?
    例如:
    var vm = new Vue({
    el: "#app",
    data:{
    a:"test"
    }
    })


    ....

    <td>{{b}}</td>
    ....
    cs3230524
    cs3230524
    OP
    May 10, 2020
    7
    能不能让不存在的属性 b,在渲染的时候不报错?
    Messiahhh
    Messiahhh
    May 10, 2020
    8
    给个空字符串不好吗
    Jason2393
    Jason2393
    May 10, 2020 via iPhone
    9
    @cs3230524 data 里定义一个对象 obj,你用户动态的属性都赋值给 obj,然后 obj.b 就行了呗? 如果要自动更新 ui,每次给 obj 赋值直接替换对象,而不是 obj.b=something ;或者 this.$set
    murmur
    murmur
    May 10, 2020
    10
    不需要,可以用$set 进行设置,点号赋值有时候未必能响应,但是如果一开始就是不响应的属性,$set 可能都没用,必须先把旧的属性删了
    zysuper
    zysuper
    May 10, 2020
    11
    data 里定义一个对象 obj, 然后用 immer 库修改 obj,最后把

    data.obj = produce(baseState, draftState => {
    draftState.push({todo: "Tweet about it"})
    draftState[1].done = true
    })

    react 用户说。;)
    weikexin
    weikexin
    May 11, 2020
    12
    @cs3230524
    可以避免 b 不存在渲染时报错

    ` <td v-if="b">{{b}}</td> `
    ghosthcp516
    ghosthcp516
    Jun 4, 2020
    13
    computed b () { return this.b || '' }
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   909 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 22:33 · PVG 06:33 · LAX 14:33 · JFK 17:33
    ♥ Do have faith in what you're doing.