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>
posted @ 2017-03-08 08:11  IT-caijw  阅读(156)  评论(0编辑  收藏  举报