是否可以使用多个Vuejs实例?

时间:2017-12-12 12:58:32

标签: vue.js

考虑这个真实应用的简化示例:

<html>
  <body>
    <script src="https://unpkg.com/vue"></script>
    <div id="app">
      <div id="subapp">
        <p>
          {{ message}}
        </p>
      </div>
      <p>{{ message }}</p>
    </div>

    <script>
      new Vue({
        el: '#app',
        data: {
          message: 'Hello Vue.js!'
        }
      })

      new Vue({
        el: '#subapp',
        data: {
          message: '¡Hola Vue.js!'
        }
      })

    </script>
  </body>
</html>

我希望看到两条不同的消息,但我会收到两次相同的消息。 如果我在'subapp'中将message更改为other_message,则Vuejs会抱怨它无法找到other_message

有没有办法将它们“嵌入”在一起? 如果没有嵌入html部分或合并控制器,有没有办法获得预期的结果? 或者,对于我想要实现的目标,还有更好的术语吗? (有时候英语很难)

2 个答案:

答案 0 :(得分:2)

就像@ka_lin所说,你应该使用组件。它们是完美的工具。

否则几乎不可能做到,特别是你提供的例子。 Vuejs无法识别{{ message }}属于哪个实例。

最接近“类似”功能的是将vue实例的范围分配给两个元素:

new Vue({
 el: '#app1',
 data () {
   return {
     message: 'Hello'
   }
 },
})

new Vue({
 el: '#app2',
 data () {
   return {
     message: 'Helloa'
   }
 }
})
<script src="https://unpkg.com/vue@2.5.9/dist/vue.js"></script>

<div id="app1">
  {{ message }}
</div>

<div id="app2">
  {{ message }}
</div>

答案 1 :(得分:1)

尝试这样的例子:-

  const App = new Vue({
    el: '#app',
    data: {
      aa: 'Hello Vue!', }

  })
  const vvv2 = new Vue({
    el: '#vvv',
    data: {
      bb: 'Hello Vue!55555555555', }

  })