美文网首页
Vue学习笔记

Vue学习笔记

作者: 韩娜爱吃辣_前端程序媛 | 来源:发表于2018-03-25 08:09 被阅读0次

View  --->      html标签      |        Model       --->       data数据

一.v-for

1.数组: (两种:数据数组,对象数组)           可选参数索引index

    1.arr:['apple','banana','pear']

                  <li v-for="(item,index) in arr">{{ item+index }}li>

     2.arrObj:[ {name:'hanna'},{name:'lsb'},{name:'bobo'} ]

          <li v-for="(item,index) in arrObj">{{ item.name+index }}li>

          push();   pop();  shift();   unshift();   splice();   sort();  reverse()

          pop() 方法用于删除数组的最后一个元素并返回删除的元素。

          shift() 方法用于把数组的第一个元素从其中删除,并返回第一个元素的值。

          unshift() 方法可向数组的开头添加一个或更多元素,并返回新的长度。

          splice() 方法用于插入、删除或替换数组的元素。(改变原始数组

 2.对象:                             可选参数键名 key, 索引 index

      obj:{ name:'haha', age:21, sex:'woman'}

      <li v-for="(item,key,index) in obj">{{ item+"-"+ key+"-"+index }}li>


二.v-show  /  v-if :

布尔值


三.事件

1.事件对象:

中$ event 是事件对象

使用事件对象show(e) { alert(e.clientX)     }

2.事件冒泡:

<div id="box" @click="alertion2">

<button @click="alertion1">冒泡button>

 点击内部按钮,触发alertion1后,再触发alertion2

3.阻止事件冒泡:

1).事件对象(e.cancelBubble=true)

<div id="box" @click="alertion2">

<button @click="alertion1($event)">冒泡button>

 alertion1(e)    {       alert("内部");    e.cancelBubble=true;      }

 2). vue自带的.stop(推荐!)

<div id="box" @click="alertion2">

<button @click.stop="alertion1">冒泡button>

4.事件默认行为:

1). 事件对象  ( e.preventDefault( ); )

                       <button @contextmenu="pre($event)">阻止默认行为button>

                       pre(e)   {    alert(11);    e.preventDefault();}

2). Vue自带的.prevent(推荐!)

       <button @contextmenu.prevent="pre1">prevent阻止默认行为button>

5. 键盘事件:

1). 事件对象  ( e.preventDefault( );  )

               <input type="text" @keydown="enter($event)">

               enter(e) { if (e.keyCode == 13){ alert("您按下回车键了");}}

2). Vue自带的(推荐!)

       (.enter/.13、up、down、left、right)

               <input type="text" @keydown.13="enter">       或者

               <input type="text" @keydown.enter="enter">


四.属性

1. 属性绑定:v-bind( 简写成 :)

           效果与v-bind同,但会报404错(url是数据)

           ( url是data中的数据) ! ! * * * 推荐使用 

2. class和style

         1). class:

                 数组    : class=”[red,a,b,d]”   值为data中的数据red: ’red’类

                 对象    : class=”{ red:true, blue:false }”         值为布尔类型

                              : class=”json”        json:  { red:true, blue:false }

                              :disabled=isDisabled.      // isDisabled是布尔值

        2).  style:

               注意:复合样式,采用驼峰命名法

               数组:style=”[ a,b,d]”值为data中的数据     a: {color: ’red’}

               对象:style=”{color:‘#fff’,backgroundColor:’purple’}”

               :style=”ajson”    ajson:{ color:’#fff’,background:’#000’ }


五.模板

1. {{ msg}}  双向绑定:数据更新,模板会跟着更新

   如果数据展示后,不需要更新,数据只绑定一次:

   {{msg}} 

2. v-html  转义模板


六.过滤器    (过滤模板数据)

 1.系统自带的过滤器,例如转化大写:{{ ‘welcome’| uppercase }}等 ,全都被2.0废除了,过滤器需要自定义

         eg:????????????????????????????

  2.       自定义过滤器:

            Vue.filter(name,function(input){      

              });

                  如果带参数*{{date | formatDate('YY-MM-DD', timeZone)}}

            eg:单位数字变成双位数字:

            {{a |toDouble}}

            window.onload=function(){

                        Vue.filter('toDouble', function(input){

                               returninput<10?'0'+input:input;

                        })

                        newVue({

                               el:'#box',

                               data:{

                                      a:9

                               }

                        });

                 }

• 时间戳一般说成XXX的时间戳,是指XXX发生或者处理的时间,这个时间被记下来,存在某处备查。

3.    时间转换器:

4.  过滤html标记:

5. 双向过滤器:

Vue.filter('filterHtml',{

          read:function(input){ //model-view

              return input.replace(/<[ ^< ]+>/g,'');

                  },

      write:function(val){ //view -> model

                  return val;

                  }

    });


七.交互(ajax)

  1.引入vue-resource库, 相当于给new  Vue添加了一个方法或对象

       • vue-resource是交互(ajax)的前提

  2.谷歌跨域:访问本地文件(非服务器文件),Chrome会产生跨域问题

       跨域:(面试)

       https://segmentfault.com/a/1190000011145364

        协议,域名,端口,但凡有一个改了,就是跨域

  3.解决跨域问题: http://blog.csdn.net/sjohnny/article/details/70256172

         1) chrome `右键`->`属性`->`快捷方式`处添加`--allow-file-access-from-files`

               操作如下图:         http://blog.csdn.net/sjohnny/article/details/70256172

         2) 将本地文件转换成服务端的文件(解决访问本地文件跨域的问题)

 sublime配置一个sublimeServer插件来使用

        配饰sublimeServer来实现将本地.html文件以服务的形式打开

         https://www.wenji8.com/p/353U26z.html

         3)使用火狐浏览器

-------------------------------------------------------------------------------------------------------

4. 交互get :(默认)   

     获取一个普通文本数据:                    

                 this.$http.get(‘a.txt’).then(function (res) {

                          alert(res.status);

                          alert(res.data);

                  },function () {

                      alert(res.status);

                   });

         给本地服务器发送数据:(* )-------à 跨服务器会产生跨域问题

        this.$http.get('get.php',{

              a:1,

              b:2

             }).then(function(res){

                  alert(res.status);

            },function(){

        })

-------------------------------------------------------------------------------------------------------

  5.  交互post :

给本地服务器发送数据 :( * ) -------à 跨服务器会产生跨域问题

this.$http.post('post.php',{

              a:1,

              b:2

   },{

              emulateJSON:true

 }).then(function(res){

              alert(res.status);

              alert(res.data);

  },function(){

               alert(res.status);

  })

-------------------------------------------------------------------------------------------------------

  5.  交互jsonp :

给本地服务器之外服务器发送数据 :( * )----->             不会跨域

eg1: (

360网站)

https://sug.so.360.cn/suggest?callback=suggest_so&encodein=utf-8&encodeout=utf-8&format=json&fields=word&word=a                   

搜索a后,在network->js中拷贝link

address,结果如下:

https://sug.so.360.cn/suggest?callback=suggest_so&word=a    接口

https://sug.so.360.cn/suggest                                                      地址

word=a                                                                                         数据

操作代码:

this.$http.jsonp('https://sug.so.360.cn/suggest',{

    word:

'a'                                         数据}).then(function(res){

// alert(res.status);

    alert(res.data.s);

},

function(res){

    alert(res.status);

})

eg1: ( 百度)

https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&json=1&p=3&sid=25263_1439_24866_21126_17001_20240_25177_25145_20929&req=2&csor=1&cb=jQuery110204777080402977609_1512525981208&_=1512525981212

https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su?wd=a&cb=jshow

https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su        地址

wd=a                                                                                                  数据

cb    --->    callback       需要设置属性

操作代码:

this.$http.jsonp('https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',{

wd:'a'

},{

 jsonp:'cb'        // 重点:cbcallback的名字}).then(function(res){

alert(res.status);

alert(res.data.s);

},

function(res){

alert(res.status);

})

-------------------------------------------------------------------------------------------------------

6.  交互综合使用:(默认是get)

 this.$http({

                     url:     // 后台接口的地址

data: {          //给后台提交数据

                                   //根据后台接口文件发送数据

                                   act:‘add’,

                                   content:this.XX

}

                     methods:post / get / jsonp

                     jsonp:  ’cb’   //cbName

}).then(function(res){

       //返回成功后的json格式文件

       var json=res.data;

if(  ){

}

});

八.生存周期

1.  钩子函数:

       a).  created                à       实例对象成功,new Vue创建以后执行

       编译的两个阶段:

       b).  beforeCompile             à    编译之前

       c).  compiled          à      编译之后

       d).  ready               à          数据插入到文档中   √

       e).  beforeDestroy        à      销毁之前

       f).  destroyed           à      销毁之后

v-cloak  (一般用于一大段)

防止花括号中的数据闪烁,在样式表中设置 [v-cloak]

{ display: none }

九、计算属性    

computed:{

       b:function(){             //默认调用get

       return   值

}

}

• 必须有return值

• 默认是getter方法,即—> 默认只能获取计算属性的值,如果想为计算属性直接赋值,则会报错。

十、VUE实例化用法

var vm=new Vue({})

• vm.$el      à         获取了元素或节点(例如divElement)

              eg:            vm.$el.style.background='red';

• vm.$data     à        获取了数据对象(就是data)

[if !supportLists]•      [endif]Vm.$mount(‘#box’);                                    à          手动挂载

new Vue({   }).$mount(‘#box’);         à         手动挂载

[if !supportLists]•      [endif]在new Vue({ aa:11 }) 中自定义的属性相当于静态属性   à   自定义属性,

若想访问自定义的属性,  vm.$options.aa

(model层中的属性,即在data数据中自定义的)

[if !supportLists]•      [endif]在new  Vue({ show:function(){alert(); } })中自定义方法  à 自定义方法,

调用方法:vm.$options.show();

[if !supportLists]•      [endif]vm.$log()                à                 打印现在data中的数据状态

十一、关于循环

v-for=”value  in  data”      

循环如果有重复数据,vue1.0是不行的,需要加track-by

vue2.0可以有

十二、自定义指令

                          属性:(View层中的属性,即在html标签中自定义的)

                          Vue.directive(指令名称,function(参数){

                            this.el   ->原生DOM元素

                          });

                          指令名称:    v-red  -> red

                          *注意: 必须以 v-开头

                          拖拽:

                          -------------------------------

十三、自定义元素指令:(用处不大)

                          Vue.elementDirective('zns-red',{

                              bind:function(){

                                  this.el.style.background='red';

                              }

                          });

------------------------------------------------

@keydown.up

@keydown.enter

@keydown.a/b/c....

十四、自定义键盘信息:

                          Vue.directive('on').keyCodes.ctrl=17;

                          Vue.directive('on').keyCodes.myenter=13;

------------------------------------------------

十五、监听数据变化:

                          vm.$el/$mount/$options/....

                          vm.$watch(name,fnCb);  //浅度

                          vm.$watch(name,fnCb,{deep:true});  //深度监视

------------------------------------------------

vue组件:

组件间各种通信

slot

vue-loader      webpack   .vue

vue-router

相关文章

网友评论

      本文标题:Vue学习笔记

      本文链接:https://www.haomeiwen.com/subject/rmqhcftx.html