iT邦幫忙

1

Vue 改 div 內容

Test.vue

<template>
    <div>
        <div id="example">{{ messages }}</div>
    </div>
</template>

Test.vue 的 script

var vm = new Vue({
    el: '#example',
    data: {
        messages: '123'
    }
})
vm.messages = 'new message' // change data

這樣 div 裡應該顯示 new message 吧

爬文到兩種解決方法都沒辦法解決

1.要寫在 template 外
https://segmentfault.com/q/1010000008029630
2.要使用 window.onload = function () {
https://stackoverflow.com/questions/29484431/vue-warn-cannot-find-element/29484590

官方相關說明
https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties

求大神開光

3
dragonH
iT邦超人 6 級 ‧ 2019-12-22 15:10:31
最佳解答

為什麼你還需要再 Test.vue

在另外 new 一個 vue 的 instance ?

如果你是 用 cdn 的方式的話

那應該很簡單

codepen

用 cli 的專案的話

我沒試過

不過大概可以透過在 main.js

掛上另一個 vue instance 來達到你的需求吧

不過我想不到有什麼理由需要這麼麻煩就是

正常的寫法應該是

<template>
  <div>
    <div>{{ messages }}</div>
  </div>
</template>

<script>
  export default {
    name: 'app',
    components: {},
    data() {
      return {
        messages: 'new message'
      }
    }
  }
</script>

而不會去掛另一個 instance

看更多先前的回應...收起先前的回應...
小魚 iT邦大師 1 級 ‧ 2019-12-22 16:11:19 檢舉

他的問題應該是要如何修改的問題吧.

dragonH iT邦超人 6 級 ‧ 2019-12-22 16:20:24 檢舉

他的問題應該是要如何修改的問題吧.

阿就是我回的東西啊/images/emoticon/emoticon16.gif

如果不先分清楚兩種寫法

問題會很大

要嘛用 cdn 的方式

然後照我 codepen 改

要用 cli 的方式

在 main.js 同時掛另一個 instance

他最大的問題看起來是在一個 instance 裡再掛另一個 instance

可以看一下官方的 doc

hobs1706 iT邦新手 5 級 ‧ 2019-12-22 16:46:40 檢舉

解決了 原來我亂弄 第一次玩vue不太懂 感謝教學

data(){
    return {
        messages: 'new message',

顯示

<div>{{ messages }}</div>

更改

this.messages = 'Test';
dragonH iT邦超人 6 級 ‧ 2019-12-22 16:51:43 檢舉

/images/emoticon/emoticon12.gif

1
紅柿
iT邦新手 5 級 ‧ 2019-12-23 14:18:54

我覺得盡量透過 Vue 自己本身的方法去修改 data 的資料比較好
確實照邏輯來說資料應該要會被改變沒錯

但要知道 new Vue 這個產生 Vue 的實體的過程 包含

  • template 解析
  • 生成抽象語法樹
  • 生成 render function
  • 產生 v-DOM
  • 資料掛載於 v-DOM
  • v-DOM 掛載至頁面形成 real DOM
    (這就是為什麼載入頁面可能會閃一下的過程)

當然能夠外部呼叫也是 cdn 引入使用 vue 的優勢之一
但你呼叫前必須確保 以上步驟都已完成

若沒有比較特殊的需求 我認為還是寫在 created, mounted 這些生命函數中去改變 data 可能會比較合適

hobs1706 iT邦新手 5 級 ‧ 2019-12-28 16:13:31 檢舉

好的 感謝你的教學 :)

0
sx0800
iT邦新手 5 級 ‧ 2019-12-27 08:25:24

1.我沒測試,根據經驗你要的答案大約是:
vm.$data.messages = 'new message'; // change data

2.但以上的做法不是標準的vue寫法, 請思考"紅柿"大的說法。

hobs1706 iT邦新手 5 級 ‧ 2019-12-28 16:16:04 檢舉

感謝教學 :) 我會試試看的

我要發表回答

立即登入回答