zoukankan      html  css  js  c++  java
  • 27. 组件可以访问Vue实例数据,如何访问? 实现响应式。

    组件可以访问Vue实例数据吗?

    答案是: 不行!,我们都说组件的复用了,所以呢 组件访问不了VUE实例中的data 数据,如果访问会报错 我试过了:

    vue.js:635 [Vue warn]: Property or method "a" is not defined on the instance but referenced during render. Make sure that this property is reactive, either in the data option, or for class-based components, by initializing the property. See: https://vuejs.org/v2/guide/reactivity.html#Declaring-Reactive-Properties.
    
    found in
    
    ---> <MCpn>
           <Root>

    组件中的数据是保存在哪里呢?顶层的Vue实例中吗?

    我们发现不能访问,而且即使可以访问,如果 将所有的数据都放在Vue实例中,Vue实例就会 变的非常臃肿。

    结论:Vue组件应该有自己保存数据的地方。

    这里说我a没定义,那么怎么样去访问呢:

    组件对象也有一个data属性(也可以有methods等属性,下面我们有用到)

    只是这个data属性必须是一个函数

    而且这个函数返回一个对象,对象内部保存着数据

    为什么data必须是一个函数呢? 因为组件的复用性,组件必须要有独立的数据 ,换句话说 每个组件都要是独立的,如果都共享一个数据,那么一改全改那就很不安全什么的,,,,,

    代码:

      <template id="bihu">
          <div>
    <!--    这里访问后台data 的 a 和 b    -->
            <h2>{{a}}</h2>
            <p>{{b}}</p>
          </div>
      </template>
    
      <div id="app">
      <cpn></cpn>
      </div>
    
    
      <script src="vue.js"></script>
    
      <script>
        //注册一个全局组件
        Vue.component('cpn',{
          template:"#bihu",
          data(){
            return {a:"我是a",b:"我是b"}
          }
        })
    
        const app = new Vue({
        el:"#app"
        })
    
      </script>

    看见没 ,组件也有data属性,但是他一定要是个函数(上面是ES6写法),返回的是对象,里面保存着数据。

    其实不止data属性 还有methods属性,里面可以定义方法, 【我们学习要温故而知新】

    下面写个例子: 组件开发计数器:

      <template id="calc">
          <div>
            <h2>计数器</h2>
            <p>当前数:{{count}}</p>
            <input type="button" value="+" @click="add">
            &nbsp;&nbsp;&nbsp;&nbsp;
            <input type="button" value="-" @click="sub">
          </div>
      </template>
    
      <div id="app">
      <calc></calc>
    
      </div>
    
    
      <script src="vue.js"></script>
    
      <script>
    
    
        const app = new Vue({
          el:"#app",
          components:{
            'calc':{
              template:"#calc",
              data(){
                return {
                  count:0
                }
              },
              methods:{
                add(){
                  this.count++;
                },
                sub(){
                  this.count--;
                }
              }
            }
          }
        })
    
      </script>

    所以你可以尝试 多用几个calc标签 就有多个计数器 但是里面的数据都是独立的  ,每个人的数字通过点击都不一样

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/15022580.html

  • 相关阅读:
    LinuxDay10——文本处理工具sed
    设计模式原则----开放封闭原则
    模式设计原则----单一职责原则
    策略模式
    建模工具
    vs查看源码行数
    单例模式(Singleton Pattern)
    UML
    简单工厂模式(Simple Factory Pattern)
    winform ProgressBar
  • 原文地址:https://www.cnblogs.com/bi-hu/p/15022580.html
Copyright © 2011-2022 走看看