• Vue学习-01


    1.vue 学习

    v-bind:title 数据绑定
    v-if 判断显示或者隐藏
    <div id="app-3">
      <p v-if="seen">Now you see me</p>
    </div>
    
    v-for 循环
    <div id="app-4">
      <ol>
        <li v-for="todo in todos">
          {{ todo.text }}
        </li>
      </ol>
    </div>
    
    v-on 事件绑定
    <div id="app-5">
      <p>{{ message }}</p>
      <button v-on:click="reverseMessage">Reverse Message</button>
    </div>
    var app5 = new Vue({
      el: '#app-5',
      data: {
        message: 'Hello Vue.js!'
      },
      methods: {
        reverseMessage: function () {
          this.message = this.message.split('').reverse().join('')
        }
      }
    })
    
    v-model 双向数据绑定
    <div id="app-6">
      <p>{{ message }}</p>
      <input v-model="message">
    </div>
    var app6 = new Vue({
      el: '#app-6',
      data: {
        message: 'Hello Vue!'
      }
    })
    
    组件
    <div id="app-7">
        <ol>
          <!-- Now we provide each todo-item with the todo object    -->
          <!-- it's representing, so that its content can be dynamic -->
          <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
        </ol>
      </div>
    Vue.component('todo-item', {
          props: ['todo'],
          template: '<li>{{ todo.text }}</li>'
        })
        var app7 = new Vue({
          el: '#app-7',
          data: {
            groceryList: [
              { text: 'Vegetables' },
              { text: 'Cheese' },
              { text: 'Whatever else humans are supposed to eat' }
            ]
          }
        })
    

    2.vue实例

    属性和方法

    每个 Vue 实例都会代理其 data 对象里所有的属性

    var data = { a: 1 }
    var vm = new Vue({
      data: data
    })
    vm.a === data.a // -> true
    // 设置属性也会影响到原始数据
    vm.a = 2
    data.a // -> 2
    // ... 反之亦然
    data.a = 3
    vm.a // -> 3
    
    生命周期

    beforeCreate->created->beforeMount->mounted->beforeUpdate->updated->beforeDestroy->destroyed

    3.模板语法

    插值(文本,纯html,属性,javascript表达式)
    指令(参数,修饰符)
    Filters(过滤器)
    缩写(v-bind,v-on)

    4.计算属性

    基础例子
    <div id="example">
      <p>Original message: "{{ message }}"</p>
      <p>Computed reversed message: "{{ reversedMessage }}"</p>
    </div>
    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('')
        }
      }
    })
    
    计算缓存vs Methods

    如果没有缓存,我们将不可避免的多次执行 A 的 getter !如果你不希望有缓存,请用 method 替代。

    <p>Reversed message: "{{ reverseMessage() }}"</p>
    // in component
    methods: {
      reverseMessage: function () {
        return this.message.split('').reverse().join('')
      }
    }
    
    计算setter
    // ...
    computed: {
      fullName: {
        // getter
        get: function () {
          return this.firstName + ' ' + this.lastName
        },
        // setter
        set: function (newValue) {
          var names = newValue.split(' ')
          this.firstName = names[0]
          this.lastName = names[names.length - 1]
        }
      }
    }
    // ...
    

    代码段

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head>
    	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    	<title>Vue 起步</title>
    	
    </head>
    <body>
    	<div id="app">
    	  {{ message }}
    	</div>
    	<div id="app-2">
    	  <span v-bind:title="message">
    	    Hover your mouse over me for a few seconds to see my dynamically bound title!
    	    {{ message }}
    	  </span>
    	</div>
    
    	<div id="app-3">
    	  <p v-if="seen">Now you see me</p>
    	</div>
    	<div id="app-4">
    	  <ol>
    	    <li v-for="todo in todos">
    	      {{ todo.text }}
    	    </li>
    	  </ol>
    	</div>
    	<div id="app-5">
    	  <p>{{ message }}</p>
    	  <button v-on:click="reverseMessage">Reverse Message</button>
    	</div>
    	<div id="app-6">
    	  <p>{{ message }}</p>
    	  <input v-model="message">
    	</div>
    
    	<div id="app-7">
    	  <ol>
    	    <!-- Now we provide each todo-item with the todo object    -->
    	    <!-- it's representing, so that its content can be dynamic -->
    	    <todo-item v-for="item in groceryList" v-bind:todo="item"></todo-item>
    	  </ol>
    	</div>
    
    
    	<div id="example">
    	  <p>Original message: "{{ message }}"</p>
    	  <p>Computed reversed message: "{{ reverseMessage() }}"</p>
    	</div>
    
    	<div id="watch-example">
    	  <p>
    	    Ask a yes/no question:
    	    <input v-model="question">
    	  </p>
    	  <p>{{ answer }}</p>
    	</div>
    	<script src="https://unpkg.com/vue/dist/vue.js"></script>
    	<script src="https://unpkg.com/axios@0.12.0/dist/axios.min.js"></script>
    	<script src="https://unpkg.com/lodash@4.13.1/lodash.min.js"></script>
    	<script>
    		var app = new Vue({
    		  el: '#app',
    		  data: {
    		    message: 'Hello Vue!'
    		  }
    		})
    		var app2 = new Vue({
    		  el: '#app-2',
    		  data: {
    		    message: 'You loaded this page on ' + new Date()
    		  }
    		})
    
    		var app3 = new Vue({
    		  el: '#app-3',
    		  data: {
    		    seen: true
    		  }
    		})
    
    		var app4 = new Vue({
    		  el: '#app-4',
    		  data: {
    		    todos: [
    		      { text: 'Learn JavaScript' },
    		      { text: 'Learn Vue' },
    		      { text: 'Build something awesome' }
    		    ]
    		  }
    		})
    
    		var app5 = new Vue({
    		  el: '#app-5',
    		  data: {
    		    message: 'Hello Vue.js!'
    		  },
    		  methods: {
    		    reverseMessage: function () {
    		      this.message = this.message.split('').reverse().join('')
    		    }
    		  }
    		})
    
    		var app6 = new Vue({
    		  el: '#app-6',
    		  data: {
    		    message: 'Hello Vue!'
    		  }
    		})
    
    		Vue.component('todo-item', {
    		  props: ['todo'],
    		  template: '<li>{{ todo.text }}</li>'
    		})
    		var app7 = new Vue({
    		  el: '#app-7',
    		  beforeCreate:function(){
    		  	console.log('before');
    		  },
    		  data: {
    		    groceryList: [
    		      { text: 'Vegetables' },
    		      { text: 'Cheese' },
    		      { text: 'Whatever else humans are supposed to eat' }
    		    ]
    		  }
    		})
    
    
    
    		var vm = new Vue({
    		  el: '#example',
    		  data: {
    		    message: 'Hello'
    		  },
    		  methods: {
    		    // a computed getter
    		    reverseMessage: function () {
    		      // `this` points to the vm instance
    		      return this.message.split('').reverse().join('')
    		    }
    		  }
    		})
    
    
    		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 () {
    		        var vm = this
    		        if (this.question.indexOf('?') === -1) {
    		          vm.answer = 'Questions usually contain a question mark. ;-)'
    		          return
    		        }
    		        vm.answer = 'Thinking...'
    		        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>
    </body>
    </html>
    
  • 相关阅读:
    完美解决vscode安装go插件失败问题
    ThinkPHP6安装注解路由报错解决办法
    通过编译源码方式,解决bee脚手架安装不上的问题
    vim 从嫌弃到依赖(9)——命令模式进阶
    vim 从嫌弃到依赖(10)——缓冲区列表
    vim 从嫌弃到依赖(8)——使用命令模式编辑文本
    Java日志规范
    vmware安装vmware tools
    papunika
    win10计算机无法搜索,win10搜索框没反应怎么办_win10电脑搜索框点击无反应如何解决...
  • 原文地址:https://www.cnblogs.com/caijw/p/6517701.html
Copyright © 2020-2023  润新知