zoukankan      html  css  js  c++  java
  • vue.js的一些知识点

    1、

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
        <div id="app">
            <span>{{count}}</span>
            <button @click="inc">+</button>
        </div>
    
        <script>
            var app = new Vue({
              // 1.
              // data () {
              //   return {count: 0}
              // },
    
              // 2.
              // data: {
              //   count: 0
              // },
    
              // 3.
              data: function() {
                return {
                  count: 0
                }
              },
    
              methods: {
                inc () {this.count++}
              }
            })
            app.$mount('#app')
        </script>
    </body> 
    </html>

    上述的data有三种写法,都能够运行,那有什么区别呢?

    首先,1是3的语法糖,是新的ES6语法,和3一摸一样。

    1和2的区别:引用官网,简而言之,在app = new Vue对象时,没什么区别,因为你app对象不会被复用。但是在组件中,因为可能在多处调用同一组件,所以为了不让多处的组件共享同一data对象,只能返回函数。

    使用组件时,大多数可以传入到 Vue 构造器中的选项可以在注册组件时使用,有一个例外: data 必须是函数。 实际上,如果你使用的不是函数,那么 Vue 会在控制台发出警告,告诉你在组件中 data 必须是一个函数。

    下面的例子会让所有的组件都同时发生变化

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <script type="text/javascript" src="vue.js"></script>
    </head>
    <body>
    <div id="example-2">
      <simple-counter></simple-counter>
      <simple-counter></simple-counter>
      <simple-counter></simple-counter>
    </div>
    
    <script>
    var data = { counter: 0 }
    Vue.component('simple-counter', {
      template: '<button v-on:click="counter += 1">{{ counter }}</button>',
      // data 是一个函数,因此 Vue 不会警告,
      // 但是我们为每一个组件返回了同一个对象引用
      data: function () {
        return data
      }
    })
    new Vue({
      el: '#example-2'
    })
    </script>
    </body> 
    </html>

    由于这三个组件共享了同一个 data , 因此增加一个 counter 会影响所有组件!我们可以通过为每个组件返回新的 data 对象来解决这个问题:

    data: function () {
      return {
        counter: 0
      }
    }

    https://cn.vuejs.org/v2/guide/components.html#data-必须是函数

    https://segmentfault.com/q/1010000007910818?_ea=1490198

    2、

    渐进式框架、采用自底向上增量开发(可以查看前面的文章)

    核心思想:响应的数据绑定和组合的视图组件

    在没有接触 DOM 的情况下更新了应用的状态 - 所有的 DOM 操作都由 Vue 来处理,你写的代码只需要关注基本逻辑。v-on可以实现。

    注意每个 Vue 实例都会代理其 data 对象里所有的属性,只有这些被代理的属性是响应的。如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。

    3、

    不仅可以绑定 DOM 文本到数据,也可以绑定 DOM 结构到数据(v-if)。

    需要注意的是:v-if不能绑定在所挂载的元素上,比如:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>vue组件</title>
    </head>
    <body>
        <div id="app" title="text" v-if="type">
            {{message}} {{text}}    
         </div>
        <script src="http://cdn.jsdelivr.net/vue/1.0.16/vue.js"></script>
         <script>
            var mes = {
                    message:"hello"+ new Date(),
                    text:"world"
                }
            var app = new Vue({
                el:"#app",
                data:mes,
                type:true
            })
         </script>
    </body>
    </html>

    这样会报错:

  • 相关阅读:
    NOIP2010普及组T3 接水问题 ——S.B.S.
    【NOIP提高组2015D2T1】uva 714 copying books【二分答案】——yhx
    【NOIP合并果子】uva 10954 add all【贪心】——yhx
    #include &lt;NOIP2009 Junior&gt; 细胞分裂 ——using namespace wxl;
    #include &lt;NOIP2008 Junior&gt; 双栈排序 ——using namespace wxl;
    NOIP2010普及组 三国游戏 -SilverN
    NOIP2009 提高组T3 机器翻译 解题报告-S.B.S
    NOIP2010提高组乌龟棋 -SilverN
    NOIP2010提高组 机器翻译 -SilverN
    UVa 297 Quadtrees -SilverN
  • 原文地址:https://www.cnblogs.com/Chen-XiaoJun/p/6247774.html
Copyright © 2011-2022 走看看