参考文档

引用

  1. <!--vue-->
  2. <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
  3. <!--异步请求插件-->
  4. <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.18.0/axios.min.js"></script>

数据单项绑定

  1. <div id="app">
  2. <p>{{ message }}</p>
  3. <input type="text" v-model="message">
  4. </div>
  5. <script>
  6. new Vue({
  7. el:'#app',
  8. data:{
  9. message:'hello world!'
  10. }
  11. })
  12. </script>

双向绑定 v-model

  1. <body>
  2. <div id="app">
  3. 用户名:<input type="text" v-model="user.username"><br/>
  4. 密码:<input type="text" v-model="user.password"><br/>
  5. <input type="button" v-on:click="fun" value="按钮">
  6. </div>
  7. </body>
  8. <script>
  9. new Vue({
  10. el:"#app",
  11. data:{
  12. user:{
  13. username:"test",
  14. password:"123"
  15. }
  16. },
  17. methods:{
  18. fun:function(){
  19. this.user.username="haha";
  20. this.user.password="1234";
  21. }
  22. }
  23. });
  24. </script>

事件绑定 v-on:click

  1. <button v-on:click="greet">Greet</button>
  2. methods: {
  3. greet: function() {
  4. alert(this.message)
  5. }
  6. }

阻止默认行为 event.preventDefault();

  1. <body>
  2. <div id="app">
  3. <input type="text" v-on:keydown="fun">
  4. </div>
  5. </body>
  6. <script>
  7. //view model
  8. new Vue({
  9. el:"#app",
  10. methods:{
  11. fun:function(){
  12. var keyCode = event.keyCode;
  13. if(!(keyCode >= 48 && keyCode <= 57)) {
  14. //2.阻止默认行为执行
  15. event.preventDefault();
  16. }
  17. }
  18. }
  19. })
  20. </script>

阻止事件冒泡 event.stopPropagation();

  1. <body>
  2. <div id="app">
  3. <div @mouseover="fun1" id="div">
  4. <textarea @mouseover="fun2">这是一个文件域</textarea>
  5. </div>
  6. </div>
  7. </body>
  8. <script>
  9. //view model
  10. new Vue({
  11. el: "#app",
  12. methods:{
  13. fun1:function(){
  14. alert("div......");
  15. },
  16. fun2:function(){
  17. alert("textarea......");
  18. event.stopPropagation();
  19. }
  20. }
  21. });
  22. </script>

事件修饰符

取消按键和鼠标事件 prevent

执行fun,但是不会输入任何东西

  1. <input type="text" v-on:click.prevent="fun">

不会提交

  1. <form v-on:submit.prevent action="http://www.itcast.cn" >
  2. <input type="submit" value="Go">
  3. </form>

取消冒泡效果

  1. v-on:mouseover.stop

按键修饰符

自定义任何按键来触发指定事件,比如enter、space q w e ……

  1. <body>
  2. <div id="app">
  3. <input type="text" @keydown.enter="fun"/>
  4. </div>
  5. </body>
  6. <script>
  7. //view model
  8. new Vue({
  9. el:"#app",
  10. methods:{
  11. fun:function(){
  12. alert("aaa");
  13. }
  14. }
  15. });
  16. </script>

v-text与v-html

  1. <body>
  2. <div id="app">
  3. <div v-text="message"></div>
  4. <div v-html="message"></div>
  5. </div>
  6. </body>
  7. <script>
  8. //view model
  9. new Vue({
  10. el:"#app",
  11. data:{
  12. message:"<h1>Hello Vue!</h1>"
  13. }
  14. });
  15. </script>

属性绑定:v-bind

  1. <body>
  2. <div id="app">
  3. <font v-bind:color="rs1">hello world</font>
  4. <font :color="rs2">hello itcast</font>
  5. <a href="http://www.itcast.cn/index/id">itcast1</a>
  6. <a v-bind="{href:'http://www.itcast.cn/index/'+id}">itcast</a>
  7. </div>
  8. </body>
  9. <script>
  10. //view model
  11. new Vue({
  12. el:"#app",
  13. data:{
  14. rs1:"red",
  15. rs2:"green",
  16. id:1
  17. }
  18. });
  19. </script>

遍历v-for

数组

  1. <body>
  2. <div id="app">
  3. <ul>
  4. <li v-for="(value,index) in arr">{{value}} and {{index}}</li>
  5. </ul>
  6. </div>
  7. </body>
  8. <script>
  9. //view model
  10. new Vue({
  11. el:"#app",
  12. data:{
  13. arr:['a','b','c','d']
  14. }
  15. });
  16. </script>

对象

  1. <body>
  2. <div id="app">
  3. <ul>
  4. <li v-for="(value,key) in product">{{key}} and {{value}}</li>
  5. </ul>
  6. </div>
  7. </body>
  8. <script>
  9. //view model
  10. new Vue({
  11. el:"#app",
  12. data:{
  13. product:{id:1,name:"手机",price:1000}
  14. }
  15. });
  16. </script>

判断

v-if

  1. v-if="expression"
  2. <h1 v-if="name.indexOf('jack') >= 0">Name: {{ name }}</h1> false时,元素被删除
  3. <h1 v-else>Sex: {{ sex }}</h1> v-else元素必须立即跟在v-if后面

v-show
v-show指令和if一样,只是把style=”display:none”

生命周期测试

  1. <body>
  2. <div id="app">
  3. {{message}}
  4. </div>
  5. </body>
  6. <script>
  7. var vm = new Vue({
  8. el: "#app",
  9. data: {
  10. message: 'hello world'
  11. },
  12. beforeCreate: function() {
  13. console.log(this);
  14. showData('创建vue实例前', this);
  15. },
  16. created: function() {
  17. showData('创建vue实例后', this);
  18. },
  19. beforeMount: function() {
  20. showData('挂载到dom前', this);
  21. },
  22. mounted: function() {
  23. showData('挂载到dom后', this);
  24. },
  25. beforeUpdate: function() {
  26. showData('数据变化更新前', this);
  27. },
  28. updated: function() {
  29. showData('数据变化更新后', this);
  30. },
  31. beforeDestroy: function() {
  32. vm.test = "3333";
  33. showData('vue实例销毁前', this);
  34. },
  35. destroyed: function() {
  36. showData('vue实例销毁后', this);
  37. }
  38. });
  39. function realDom() {
  40. console.log('真实dom结构:' + document.getElementById('app').innerHTML);
  41. }
  42. function showData(process, obj) {
  43. console.log(process);
  44. console.log('data 数据:' + obj.message)
  45. console.log('挂载的对象:')
  46. console.log(obj.$el)
  47. realDom();
  48. console.log('------------------')
  49. console.log('------------------')
  50. }
  51. //vm.message = "good...";
  52. vm.$destroy();
  53. </script>

select特殊处理

一般情况,我们只需要select的value,不需要text,这个直接绑定即可。

下面是需要text的情况。

  • 绑定一个对象,而不是id
  • 添加watch赋值(watch会有极短的时间延迟)
  1. <div id="app">
  2. <select v-model="user" @change="userChange">
  3. <option v-for="(value,key) in users"
  4. :key="key" :value="value"
  5. >{{value.name}}
  6. </option>
  7. </select>
  8. </div>
  9. </body>
  10. <script>
  11. new Vue({
  12. el: "#app",
  13. data: {
  14. user: {},
  15. users: [],
  16. model: {
  17. id: 0,
  18. name: '',
  19. age: 20
  20. }
  21. },
  22. watch: {
  23. user(newUser, oldUser) {
  24. this.model.id = newUser.id;
  25. this.model.name = newUser.name;
  26. }
  27. },
  28. methods: {
  29. },
  30. mounted() {
  31. axios.get("http://soft.tianyunperfect.cn:3000/mock/40/test").then(res => {
  32. this.users = res.data.data;
  33. }).catch(e => {
  34. console.log(e);
  35. });
  36. }
  37. });
  38. </script>

这短短的一生我们最终都会失去,不放大胆一点,爱一个人、攀一座山、追一个梦!