大佬们 vue 这段动态渲染的代码为什么不行 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Ritter
V2EX    Vue.js

大佬们 vue 这段动态渲染的代码为什么不行

  •  
  •   Ritter 2020-04-09 15:14:48 +08:00 3828 次点击
    这是一个创建于 2062 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用了 elementui 组件 想动态渲染一部分 html 片段 但是为什么没有数据 G4xas1.png G4xdqx.png 新手求教 谢谢

    34 条回复    2020-04-13 17:06:33 +08:00
    Ritter
        1
    Ritter  
    OP
       2020-04-09 15:18:46 +08:00
    挠头
    Ritter
        2
    Ritter  
    OP
       2020-04-09 15:40:20 +08:00
    挠头*2
    shakaraka
        3
    shakaraka  
    PRO
       2020-04-09 15:41:26 +08:00   1
    看着你的代码我也只能挠头*3
    also24
        4
    also24  
       2020-04-09 15:42:41 +08:00
    Vue.extend( options ) 那一句,data() 上的 warning 是怎么回事儿?
    Ritter
        5
    Ritter  
    OP
       2020-04-09 15:42:49 +08:00
    Ritter
        6
    Ritter  
    OP
       2020-04-09 15:44:28 +08:00
    @also24 哪个 warning 有红线的只是 eslint 的问题
    qq316107934
        7
    qq316107934  
       2020-04-09 15:46:36 +08:00   1
    这...都用了 vue 了为啥还要直接操作 DOM
    also24
        8
    also24  
       2020-04-09 15:46:54 +08:00
    @Ritter #6
    你和我说的是同一行嘛?我说的是 data() 上的 warning 那里。
    虽然我不会写前端,但是看文档的话,难道不是 data: function () 这样写么?

    https://cn.vuejs.org/v2/api/index.html#Vue-extend
    jjianwen68
        9
    jjianwen68  
       2020-04-09 15:48:39 +08:00
    转换思想,用 vue 了就不要按 jquery 那套了吧
    murmur
        10
    murmur  
       2020-04-09 15:51:46 +08:00
    template 部分有语法错误么,我这看似乎是 column 都没渲染出来啊,表头呢
    murmur
        11
    murmur  
       2020-04-09 15:52:20 +08:00
    @also24 es6 语法了解下,data()就是 function
    Ritter
        12
    Ritter  
    OP
       2020-04-09 15:53:27 +08:00
    @also24 data()上面没有 warning 这个是 es6 的语法
    Ritter
        13
    Ritter  
    OP
       2020-04-09 15:55:26 +08:00
    @qq316107934
    @jjianwen68
    因为在 echarts tooltip 格式化函数只能返回 html 片段 我又想在里面用 elementui 组件
    rain0002009
        14
    rain0002009  
       2020-04-09 15:57:21 +08:00
    您瞧瞧 您这代码和官网例子的区别
    Ritter
        15
    Ritter  
    OP
       2020-04-09 15:59:34 +08:00
    @murmur 应该没有 看类名 el-table 组件已经被编译了 但是数据没有填进去
    Ritter
        16
    Ritter  
    OP
       2020-04-09 16:00:13 +08:00
    @rain0002009 图裂了 老哥
    rabbbit
        17
    rabbbit  
       2020-04-09 16:00:23 +08:00
    tipComponent.$nextTick(() => {
    ...const html = tipComponent.$el.outerHTML
    ...console.log(html)
    })
    also24
        18
    also24  
       2020-04-09 16:02:10 +08:00
    @murmur #11
    @Ritter #12
    soga,js 果然博大精深

    14 楼贴的图是
    https://cn.vuejs.org/v2/api/index.html#vm-mount
    rabbbit
        19
    rabbbit  
       2020-04-09 16:02:14 +08:00
    直接取当然没变化, Vue 不会立刻修改 Dom.
    shintendo
        20
    shintendo  
       2020-04-09 16:08:07 +08:00
    17L 正解。
    话说你这用法也实在诡异
    Ritter
        21
    Ritter  
    OP
       2020-04-09 16:11:45 +08:00
    @rabbbit 大佬牛逼 再问一下 为什么我直接循环数据又可以显示出来 像这种传递给另一个组件的 props 的却不行
    rabbbit
        22
    rabbbit  
       2020-04-09 16:16:36 +08:00   1
    @Ritter 看不懂,写个完整点的例子发过来看看.
    rain0002009
        23
    rain0002009  
       2020-04-09 16:17:55 +08:00
    好了 破案了
    Ritter
        24
    Ritter  
    OP
       2020-04-09 16:23:03 +08:00
    例如我把这个 html 改成
    ````
    const tipTableHtml = '<div>
    <span v-for="d in tableData">{{ d.name }}</span>
    </div>'
    ```
    这样是直接可以看到渲染后的数据的
    还有就是我这个 formatter 函数需要返回一个 html 字符串 但是返回的字符串在$nextTick 的回调中 这要怎么办
    Ritter
        25
    Ritter  
    OP
       2020-04-09 16:24:16 +08:00
    @rabbbit 忘了 @
    rabbbit
        26
    rabbbit  
       2020-04-09 16:40:46 +08:00   1
    @Ritter
    element-table 里面有默认值,他会先用默认值去渲染 Dom.
    你可以试下下面这个例子, console 输出的还是默认值:

    const tipCompOnent= new tipComponentConstruct().$mount();
    tipComponent.tableData[0].data = 'xxx' // 注意这里
    tipComponent.$nextTick(() => {
    ...const html = tipComponent.$el.outerHTML
    ...console.log(html)
    })

    至于取 nextTick 里的值, 可以用 watch

    Vue.extend({
    ...data() {
    ......return {
    .........html: null
    ......}
    ...}
    ...watch: {
    ......html(value) {console.log(value)}
    ...}
    })
    a.$nextTick(() => {
    ...tipComponent.html = a.$el.outerHTML
    })
    rabbbit
        27
    rabbbit  
       2020-04-09 16:42:55 +08:00   1
    const tipCompOnent= new tipComponentConstruct().$mount();
    tipComponent.tableData[0].data = 'xxx'
    console.log(tipComponent.$el.outerHTML) // 漏了一行
    tipComponent.$nextTick(() => {
    ...const html = tipComponent.$el.outerHTML
    ...console.log(html)
    })
    Ritter
        28
    Ritter  
    OP
       2020-04-09 16:52:51 +08:00
    @rabbbit 明白了 谢谢大佬
    okampfer
        29
    okampfer  
       2020-04-09 18:17:58 +08:00
    element-ui 的组件同样需要 vue-loader 在打包阶段处理,echarts tooltip 格式化函数返回的 html 片段运行时才会被渲染,所以无法被处理,如果里面用了 element-ui 的组件,应该会被原样输出。

    如果我的想法有错,还请各位前端大佬指正。
    zhouyg
        30
    zhouyg  
       2020-04-10 12:01:57 +08:00
    直接赋值 el-table 是不会被编译的,只会当作成自定义 html 标签
    shenzhimin
        31
    shenzhimin  
       2020-04-10 12:04:33 +08:00
    @rabbbit 应该不需要 nexttick 的,element-table 里面有默认值是在没有传参数的时候 才会用到,应该不存在先用默认值渲染的说法
    可以看看 @rain0002009 上面的截图
    tikazyq
        32
    tikazyq  
       2020-04-10 12:07:53 +08:00
    你应该避免这么做
    ourFEer
        33
    ourFEer  
       2020-04-10 17:54:17 +08:00
    大佬,挠头 * n
    Joseph0717
        34
    Joseph0717  
       2020-04-13 17:06:33 +08:00
    铁铁,别这样,非要这样可以这样,dom=`<html></html>`,注意不双是引号
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2888 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 91ms UTC 14:05 PVG 22:05 LAX 06:05 JFK 09:05
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86