zoukankan      html  css  js  c++  java
  • vueJs的学习笔记(二)

    开始

    一个实例的创建

                //一个实例的产生
                var vm = new Vue({
                    //你的代码
                })

    数据与方法

    vue的实例中采用了响应式系统,其实就是数据的双向绑定。
    如果创建了一个对象,并且又在vue的实例中添加了这个对象,那么就可以实现“响应”.
    
            <script>
                //创建一个对象
                var data = {a:1}
                //把对象加入到实例中。实例会找到所有的属性
                var vm = new Vue({
                    data:data
                })
                vm.a === data.a //true
                //设置某一个值,另外一个也会发生改变 ,反之亦然
                vm.a = 2;
                data.a//2
            </script>

    但是响应式必须满足的条件是,对象和实例中都存在才可以。

    vue中提供了一些预定义的方法和属性,为了和用户的区分开来,所以前面会添加$。
    

    模版语法

    插值

            <!--大括号是最常见的插值方式,它会和数据对象进行绑定更新-->
            <p>{{msg}}</p>

    纯HTML

    在vuejs中,单纯的大括弧数据绑定只能实现纯文本,但是提供了v-html来显示具有html结构的数据。
    
        <body>
            <div id="app">
                <p >{{datas}}</p>
            </div>
            <script>
                var app = new Vue({
                    el:"#app",
                    data:{
                        datas:"<em>你好啊</em>"
                    }
                })
            </script>
        </body>
    在网页中将会显示具有em(倾斜)属性的文本,如果没有v-html的绑定,就只会显示纯文本。
    

    javascript

    每一个{{}}中都可以使用javascript语句,但是限制的是,只能使用一个语句。
    
            <div id="app">
                <p >{{number+1}}</p>
            </div>

    指令

    指令是带有v-的特殊属性,一般是产生单个js的表达式。作用是,当表达式的值发生改变的时候,响应式的作用域dom结构。
    

    参数

    有的指令后面可以跟一个参数,以冒号开始,告知绑定的数据的作用。
    
    <p v-on:click="onclick">点我</p>

    它的含义就是,点击时触发点击事件,执行onclick函数。

    计算属性与观察者

    什么是计算属性,首先我们知道在{{}}运算符中可以执行js的计算,但是只建议进行简单的计算。如果把冗长的计算过程放在其中,不仅代码不宜阅读,而且不宜维护,所以对于计算的部分当然是放在js的地方。
    

    HTML

    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>

    JS

    var vm = new Vue({
      el: '#example',
      data: {
        message: 'Hello'
      },
      computed: {
        // a computed getter
        reversedMessage: function () {
          // `this` points to the vm instance
          return this.message.split('').reverse().join('')
        }
      }
    })
    这是js官方文档提供的一个实例。没错所谓的计算属性,就是把计算的部分放在vue的实例中,在HTMl只是提供一个引用。
    
    那么这个时候就有一个疑问了,computed和methods的区别是什么?
    1.computed在dom加载完毕就执行,而methods中的方法需要调用才可以执行。
    2.二者都可以达到相同的效果。
    3.computed的是基于依赖的关系,也就是最后的结果reverseMessage,取决于message是否发生改变。
    4.computed的优势在于依赖缓存,假设有一个开销比较大计算属性A,B依赖A产生结果。如果A没有发生变化,那么B会调用之前的缓存,而无需重新计算。但是在methods中,每一次的调用,都会进行一遍计算。
    

    所以computed的重要点在于依赖,如果没有依赖关系的computed是没有意义的。
    computed本质上还是一个属性,所以使用的时候,采用属性的方式调用。

    观察者

    虽然默认的vue是没有setter的,但是我们可以自行添加。
    比如当你想要在执行计算属性的时候,执行另一个异步操作(通常是为了解决开销大的情况),那么这个时候采用watch。
    比如一个vuejs官方文档的实例:
    
    <script>
    var watchExampleVM = new Vue({
      el: '#watch-example',
      data: {
        question: '',
        answer: 'I cannot give you an answer until you ask a question!'
      },
      watch: {
        // 如果 question 发生改变,这个函数就会运行
        question: function (newQuestion) {
          this.answer = 'Waiting for you to stop typing...'
          this.getAnswer()
        }
      },
      methods: {
        // _.debounce 是一个通过 lodash 限制操作频率的函数。
        // 在这个例子中,我们希望限制访问 yesno.wtf/api 的频率
        // ajax 请求直到用户输入完毕才会发出
        // 学习更多关于 _.debounce function (and its cousin
        // _.throttle), 参考: https://lodash.com/docs#debounce
        getAnswer: _.debounce(
          function () {
            if (this.question.indexOf('?') === -1) {
              this.answer = 'Questions usually contain a question mark. ;-)'
              return
            }
            this.answer = 'Thinking...'
            var vm = this
            axios.get('https://yesno.wtf/api')
              .then(function (response) {
                vm.answer = _.capitalize(response.data.answer)
              })
              .catch(function (error) {
                vm.answer = 'Error! Could not reach the API. ' + error
              })
          },
          // 这是我们为用户停止输入等待的毫秒数
          500
        )
      }
    })
    </script>
  • 相关阅读:
    Enter passphrase
    laravel扩展包-私有库
    php7中异常
    laravel-admin(自定义表单视图)
    laravel-admin(自定义表单与验证)
    ZJU校赛划水记
    bzoj 4762: 最小集合
    WC2017 颓废记
    bzoj 2337: [HNOI2011]XOR和路径
    bzoj 2870: 最长道路tree
  • 原文地址:https://www.cnblogs.com/comefuture/p/8305946.html
Copyright © 2011-2022 走看看