初学前端小菜鸡的自我修炼

                                     前端初学小菜鸡日记

Vue中的 v-for以及v-if v-else

    <body>
    <div id ="app"> 
   				  <div v-if="flag">
     				    <span>1小猪</span>
      				   <input type="text" key="1">
      				   
       				!!! 这里如果没有key  flag变化时重新渲染时框内数据不会被删除 仍然显示   
       				   
    			 </div>
 			    <div v-else>
   				      <span>2小猪</span>
       				  <input type="text" key="2">
       				  
             	!!! 这里如果没有key 重新渲染时框内数据不会被删除 仍然显示  
             	
  				  </div>
					<script src="node_modules/vue/dist/vue.js"> </script>

				 <script> 
					  let vm = new Vue({
 				     el:'#app',
				      data:{ //for value of [1,2,3]
       		       fruits:['?','?','?'],
       		       info:{name:'chenxiaozhu',age:20,address:'深圳'},
        		      flag:true   
         			    }   
   										    })    ;
      				   </script>
      				   	  </body>
 							</html>


 尽量不要用index代替key, index消耗更大
			   <li key="1">? </li>
				<li key="2">? </li>
 			    <li key="3">? </li>
          if use index索引 正序变倒序 First渲染1变成3   Second渲染 香蕉变草莓  
                      需要经过两次渲染,若是使用key则消耗较小
				 <li key="3">? </li>      
				<li key="2">? </li>
 			    <li key="1">? </li>

此时插入一条vm功能 .$mount() 挂载
第一种方法如下

       	let vm = new Vue({
     					 el:'#app',
  					     data:{   
  					    		 }   
   							        })     ;

第二种挂载方法如下 将当前实例挂载到模板
单元测试不使用真实DOM 创动态虚拟DOM 到时找不到ID APP 则挂载到虚拟DOM上面

		  	let vm = new Vue({
  					  	      data:{   
  					    	     	 }   
   							        }).$mount('#app') ;

使用方法如下

		  	let vm = new Vue({
  					  	      data:{   
  					    	     	 }   
   							        }).$mount('DIV') ;
   		    let div=document.creatElement('DIV')

单向绑定 vue中数据变化导致视图更新 只有数据改 视图变 单向
双向绑定 试图更新也会影响数据变化(想使用双向需要可输入,如input type=“text”)

			<body>
	     <div id ="app"> 
	     	<input type="text" :value="msg" @input="fn" >  
	     								    value="msg" 此时msg是字符串 会出错
	     									 需要写成 :value="msg"
	     									 v-on:inpt="fn()" 绑定方法 触发函数
	     									 
	     			@小知识V-blind绑定属性  缩写等同于 ":"  
	     			 V-on绑定方法 缩写等同于"@"
	     									 	  
	        {{msg}}                         此时取出的值  与text文本框内的值 互不干扰
	     
          <script src="node_modules/vue/dist/vue.js"> </script>
       <script> 
		   let vm = new Vue({
 			        el:'#app',
                    data:{ 
                    msg:'hello',
                    fn:function(){
                    		console.log('xxx') 
                    		 //触发fn方法时 输入台 输入XXX
                    		// XXX改为this,则变成window 但是不可能在内使用VM
                    		//于是需要将其放在一个method中  如下文的 新vue中
           				         }
                           }   
                            }) ;
	  </script>
	   </body>

新VUE!!!!

 let vm = new Vue({
 			        el:'#app',
                    data:{ 
                    msg:'hello',
                          },
                    methods:{
                    fn(e){
                        /* console.log(this)  //方法中的this都是指向当前实例 实例上有msg */
                         this.msg=e.target.value
                         }
                            }
                            }) ;

此时实现了双向绑定,试图更新影响数据变化,框内内容和MSG内容同步更新。
!!!
出现的小问题 绑定方法的时候 @input=“fn” 要不要括号呢?
如果添加了括号 则出现报错没有target 如果非要加一个括号怎么办呢?
在括号内传入参数,写成 @input=“fn($event)” 该event等于数据中fn(e)中的e相同
若需要传入其他参数,也可以在event后面加上a 用逗号隔开即可,若是想看运行内容
则写入 fn(e,a){
console.log(a); //对应括号内的a
this.msg=e.target.value //对应括号内的e

此时的代码可以继续简化! 如何简化呢?
		  <div id ="app"> 
  简化如下<input type="text" :value="msg" @input="(e)=>(msg=e.target.value)">  
	     	
	     	/* v-model是 @input + :value的一个语法糖  */ 
	     	
插入!!此行为语法糖	     	<input type ="text" v-model="msg">
							{{msg}}                          
	     
            <script src="node_modules/vue/dist/vue.js"> </script>
     		  <script> 
		 		  let vm = new Vue({
 			     			   el:'#app',
                			    data:{ 
                			   msg:'hello',
                      				    },
                    methods:{
                 			  /*  fn(e){    
               		             this.msg=e.target.value      //这两行 到上面去了
                         }    */
                            }
                            }) ;

上图代码运行出现三个两个方框 一个msg 两个方框都是双向绑定 同时变化数据。
第二个方框运用的是语法糖, v-model是 @input + :value的一个语法糖。
第二个方框直接使用了v-model=msg 而第一个方框的值为msg 且有方法函数
所以第二个方框直接具有了第一个方框所具备的功能。

select,radio,checkbox常用双向绑定。
 First example
	     <div id ="app"> 
  <input type="text"  :value="msg" @input="(e)=>(msg=e.target.value)">  
  <input type ="text" v-model="msg">
                 {{msg}}

  <select v-model="selectValue">
 <option v-for="(list,key) in  lists " :value="list.id">{{list.value}}</option>
  </select>
          {{selectValue}}         
         </div>
         
  			  <script src="node_modules/vue/dist/vue.js"> </script>
	          <script> 
			     let vm = new Vue({
         					         data:{ 
                     			    msg:'hello',
                    			     selectValue:'2',  //这里选择2则默认下的选择为2
                   	  			    lists:[{value:'菜单1',id:'1小猪'},{value:'菜单2',id:'2小猪'},{value:'菜单3',id:'3小猪'}]
                        						  },
            methods:{
                 
                    }
                    }).$mount('#app');
                    
				 </script> 
上图代码 呈现的是一个下拉表格  左边是菜单1-菜单3 点击对应的是1小猪 2小猪 3小猪  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值