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
求大神開光
為什麼你還需要再 Test.vue
在另外 new 一個 vue 的 instance ?
如果你是 用 cdn 的方式的話
那應該很簡單
用 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
我覺得盡量透過 Vue 自己本身的方法去修改 data 的資料比較好
確實照邏輯來說資料應該要會被改變沒錯
但要知道 new Vue 這個產生 Vue 的實體的過程 包含
當然能夠外部呼叫也是 cdn 引入使用 vue 的優勢之一
但你呼叫前必須確保 以上步驟都已完成
若沒有比較特殊的需求 我認為還是寫在 created, mounted 這些生命函數中去改變 data 可能會比較合適
1.我沒測試,根據經驗你要的答案大約是:
vm.$data.messages = 'new message'; // change data
2.但以上的做法不是標準的vue寫法, 請思考"紅柿"大的說法。