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

2020-05-10 14:55:51 +08:00
cs3230524  cs3230524
如果我单向绑定只做展示,有没有不提前声明就能渲染模板的方法?现在模板和填充的数据都有可能是动态的,不能提前声明出来。大家怎么处理这个需求的?
2436 次点击
所在节点   Vue.js  Vue.js
13 条回复
cydysm
cydysm
2020-05-10 15:05:12 +08:00
computed ?
shintendo
shintendo
2020-05-10 15:08:58 +08:00
想象不出“不能提前声明”的场景,能举个例子么
gouflv
gouflv
2020-05-10 15:17:01 +08:00
对象内部的属性可以动态添加
cs3230524
cs3230524
2020-05-10 15:19:53 +08:00
@shintendo 例如我有许多报告要打印,这些报告模板是后台维护的,报告的字段是用户定义的,所以是动态的。
rabbbit
rabbbit
2020-05-10 15:24:48 +08:00
如果是指 data 里的属性的话, 可以用 Vue.set 方法
cs3230524
cs3230524
2020-05-10 15:24:52 +08:00
换个方法吧,有没有办法让 data 里不存在的属性在模板渲染的时候不报错?
例如:
var vm = new Vue({
el: "#app",
data:{
a:"test"
}
})


....

<td>{{b}}</td>
....
cs3230524
cs3230524
2020-05-10 15:26:06 +08:00
能不能让不存在的属性 b,在渲染的时候不报错?
Messiahhh
Messiahhh
2020-05-10 15:40:43 +08:00
给个空字符串不好吗
JasonSi
JasonSi
2020-05-10 16:07:29 +08:00
@cs3230524 data 里定义一个对象 obj,你用户动态的属性都赋值给 obj,然后 obj.b 就行了呗? 如果要自动更新 ui,每次给 obj 赋值直接替换对象,而不是 obj.b=something ;或者 this.$set
murmur
murmur
2020-05-10 16:18:19 +08:00
不需要,可以用$set 进行设置,点号赋值有时候未必能响应,但是如果一开始就是不响应的属性,$set 可能都没用,必须先把旧的属性删了
zysuper
zysuper
2020-05-10 16:32:52 +08:00
data 里定义一个对象 obj, 然后用 immer 库修改 obj,最后把

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

react 用户说。;)
weikexin
weikexin
2020-05-11 11:21:39 +08:00
@cs3230524
可以避免 b 不存在渲染时报错

` <td v-if="b">{{b}}</td> `
ghosthcp516
ghosthcp516
2020-06-04 10:46:16 +08:00
computed b () { return this.b || '' }

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/670248

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX