zoukankan      html  css  js  c++  java
  • 前端VUE笔记

               vue

    杂记 脚手架

    console.log()控制台打印输出和alert()差不多   

    !important设置Css优先级最高

    display: flex; <div style=" flex: 1;"/></div>设置水平状态下div占的宽度比

    <style scoped>  设置作用域 只限于目前页面

    插值

    <template>写法
           <div v-once>{{su}}</div> 当标签中带v-once 时插值处的内容不会更新,但会影响其                             

    他节点上的数据绑定
          <input type="button" @click="insert" value="点击">

    computed:计算属性 

    <template>写法 <div>age+a={{addToA}}</div>

    methods: 中 computed:{addToA:function(){   return this.age+this.a  },

    data: 中 a:0,

    ref数据绑定

    <template> <input type="text"  ref="name"></input>
     <input type="button" @click="insert">

    methods:{  insert:function () { this.b=this.$refs.name.value; }},

    this.$refs.name.value;获取ref名为name的value值

        data:  function(){return{  n:'',}}}

    引图片

    <template> <img class="images" :src="imgSrc">

     data: imgSrc:"图片路径",

    For循环 循环数组

    1 <template> 页面中循环显示数组的方法

    <li v-for="(item , index) in brands[brand].category[cate].skill"
        @click="chooseCategories(index)" index 要查询的数组下标

    brands[brand] 数组[下标].skill数组内字段
       :class="[skillsIndex===index?'selectedShow choiceBox':'choiceBox']"
    >
        {{item.skills}} 显示数组内的字段

    </li>

     

    2  methods:中用For循环数组内数据

    for(let i in this.brands){ i是下标
        console.log(this.brands[this.brand]);
    }

    全局组件

      main页面设置

    Import User from ./components/Users //导包 Users是一个vue页面

    Vue.component(users,Users) //全局注册组件  

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    指令

    V-text

     更新元素的textContent。如果要更新部分的textContent,需要使用{{ Mustache }} 插值。

    <span v-text="msg"></span> <!-- 和下面的一样 --> <span>{{msg}}</span>

    V-html

    V-text一样 只是V-text是设置文本的 V-html渲染css

    <div v-html="html"></div>     data 里面的 html:'<h1>教程</h1>',

    v-if  判断文本中属性是否为确定的值,如果是就显示后面的属性,如不不是就不显示

    <h1 v-if="ok">Hello</h1>

    data (){ return {ok:true,}}

    默认判断ok 属性是否为true 是就显示Hello 不是就显示为空

    v-show

    也是根据条件来展示元素的,和v-if的功能类似。但是v-show中如果条件为false就生成代码不显示。而v-if如果条件为false,就直接不生成代码。

     

    v-ifv-else   v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

     <div v-if="Math.random()>0.5">
        sorry
      </div>
      <div v-else>
        not sorry
      </div>
    </div>

     

    判断Math.random()>0.5 是的话就输出sorry 不是就输出 not sorry

    v-else-if

    <div v-if="show === 'ab'">ab</div>
    <div v-else-if="show === 'b'">b</div>
    <div v-else-if="show === 'c'">c</div>
    <div v-else>abcde</div>

     

    data (){
       return {
            show:'cb',
      }

    判断字符串是否为ad 是否为b 是否为c 否则显示abcde

     

     

     

     

     

     

    V-for

    <template>

    <div>
          <ul>
            <li v-for="todo in tods "> 或者"(todo i) in tods " 键是i 值是todo
              {{todo.txt}}
            </li>
          </ul>
        </div>
    </template>

     

    <script>

    data (){
       return {

    tods:[
      {txt:'你好'},
      {txt:'数组'},
      {txt:'函数'},
    ]

    </script>

    循环获取 tods里的值

    或者

      <li v-for="todo in tods ">
              获取 id {{user.id}}  获取姓名{{user.name}}

     </li>

    v-for 迭代数字

     <ul>
        <li v-for="todo in 10 ">
          这是第{{todo}}循环
        </li>
    </ul>

     

    V-on 事件<a v-on:click="doThis"></a> 缩写 <a @click="doThis"></a>

    事件修饰符v-on:click

    1 <!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a>

    2 <!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>

    3<!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> 4<!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"></a>

    5 <!-- 只有修饰符 --> <form v-on:submit.prevent></form> 

    6 <!-- 添加事件监听器时使用事件捕获模式 --> 

    <!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 --> 

    <div v-on:click.capture="doThis">...</div> 

    7 <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->

     <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div>

    提示:v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

    键值修饰符@keyup

    <template> <div>{{n}}</div> <input type="text"  ref="name" @keyup="insert"></input>

    v-on:keyup跟随键盘输入调用insert方法

    methods: { insert:function () { this.n=this.$refs.name.value;}},

    data:  function(){ return{ n:'', } }}

    如果v-on:keyup.enter 这样写只有按回车键才能触发里面的方法

     

    v-on:input 标签 跟随键盘输入调用方法

    页面

    <el-col :span="4">
          <el-input placeholder="详细地址(最多输入50个字符)" v-model="data.address"       @input="inputFunction()" :maxlength="30"></el-input>:maxlength="30"//限制输入30个字符
        </el-col>
        <el-col :span="5" >输入{{insert}}个字符</el-col>

    方法

    methods: {
          inputFunction(){
              this.insert=this.data.address.length
          }},

    data

    data() {  return { insert:''}},

     

     

     

     

     

    elementUi组件下拉框绑定事件无效的解决方案

     

    正确打开方式 @click.native绑定点击事件

    <el-dropdown>

              <span class="el-dropdown-link" ref="echarType">

               柱状图<i class="el-icon-arrow-down el-icon--right"></i>

              </span>

              <el-dropdown-menu slot="dropdown" >

                <el-dropdown-item>柱状图</el-dropdown-item>

                <el-dropdown-item @click.native="seeTable">表格</el-dropdown-item>

              </el-dropdown-menu>

            </el-dropdown>

     

     

    V-bind css绑定  <div v-bind:class={src} </div> 缩写 <div :class={src} </div>

    1 绑定一个图片 <img :src="src"></img> 在data中写地址src:"static/test.jpeg",

    2  绑定HTML Class   Class 绑定

    <div :class="{'textClor':isColor,'textSize':fontsize}">span</div>

    Data中写 isColor:true, fontsize:true,

    Style中写 .textClor{ text-color: aqua;}    .textSize{font-size: 50px;}

    也可以直接绑定数据里的一个对象:

     <template>中写法 <div :class="classObject">span</div>

    Data中写 classObject:{'textClor':true,  'textSize':false,}

    Style 不变

    * 数组语法

      <template>中写法<div :class="[classa,classb]">span</div>

     Data中写  classa:'textClor', classb:'textSize',

    Style 不变

       

    * 当有多个条件时也可以使用对象语法

    <div v-bind:class="[{ active: isActive }, errorClass]"></div> 

    3 style 绑定

     <template>写法<div :style="{color:activeClor,fontSize:fontSize +'px'}">span</div>

    Data 中写法   activeClor:'red',   fontSize:30,

          * 直接绑定到一个样式对象通常更好,这会让模板更清晰:        

       <template>写法<div :style="text">span</div>

    Data 中写法text:{  color:'red',fontSize:'30px',}

          *数组写法

     <template>写法<div :style="[styleObjectA,styleObjectB]">span</div>

    Data 中写法   styleObjectA:{  color:'red', fontSize:'30px'},
          styleObjectB:{  textDecoration:'underline'  }添加下划线样式

    *多重值

    2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

    <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

    这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex

     

    v-model  表单控件绑定

          可以用 v-model 指令在表单控件元素上创建双向数据绑定。根据控件类型它自动选取正确的方法更新元素。尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些极端例子。

         1*Text

            <template>写法

    <div>{{mess}}</div>显示用户输入的值
    <input type="text" v-model="mess" placeholder="请输入值"><br>

    Data写法 mess:'', 定义一个空的值

     

    2* Multiline text 多文本输入checkbox

      <template>写法 

       <div>{{message}}</div>显示用户输入的值

       <textarea v-model="message" placeholder="添加多行"></textarea>

       Data写法message:'', 定义一个空的值

    3* 多选框

      <template>写法 

     <div>{{mo}}</div>如果点击就显示为true 如果没点击就显示false
     <input type="checkbox"  v-model="mo">

        Data写法 mo:false, 定义一个为false的值

    4* 多个勾选框 绑定到同一个数组

    <template>写法

     <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
     <label for="Jack">Jack</label>
     <input type="checkbox" id="john" value="John" v-model="checkedNames">
     <label for="john">John</label>
     <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
     <label for="mike">Mike</label>  <br>
     <span>Checked names: {{ checkedNames | json }}</span>

     *Data写法checkedNames:[],定义一个空的数点击后的值存入mike|john|Jack数组中

    其中 input中的id要与label中的for属性值要一致

    5* radio 只能选一个的多选框

      <input type="radio" id="one" value="One" v-model="picked">
        <label for="one">One</label><br>
         <input type="radio" id="two" value="Two" v-model="picked">
      <label for="two">Two</label> <br>
      <span>Picked: {{ picked }}</span>

    Data中定义个变量接收信息

      picked:[],

    7 单选框

    <template>写法

    <select v-model="sel">
      <option selected>A</option>
      <option>B</option>
      <option>C</option>
    </select>
    <span>Sel: {{ sel}}</span>

    Data中定义个变量接收信息

      data: function () {return { sel:'',  }

    8 debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。

    <input v-model="msg" debounce="500*200">

     

     

    父子组件传值

    1 通过prop实现通信

    子组件的props选项能够接收来自父组件数据。没错,仅仅只能接收,props是单向绑定的,即只能父组件向子组件传递,不能反向。而传递的方式也分为两种:

    静态传递

    子组件通过props选项来声明一个自定义的属性,然后父组件就可以在嵌套标签的时候,通过这个属性往子组件传递数据了。

    * 传页面

     在子面写入组件<template><div style="color: red">  hello world </div></template>

    在父页面引用子组件页面 import ssss from './ssss'

     调用   export default { components: {ssss},}

    页面就可以调用子页面的组件了<template><ssss></ssss></template>

    * 传自定义属性

         子组件写法

    <template> <div >{{message}}</div></template>

    export default {props:['message'],  data (){  return{ na:'子组件页面', }}

    严谨的写法

    Props:{users:{type:Array,required:true}}//type:Array传递的类型

    父组件写法

    <template> <div>  <users :message="子組件属性"></users>  </div></template>

          <script> import users from './testS' 引入子组件地址  

    export default {components: { users},</script> 实例化子组件

    动态传递

    我们已经知道了可以像上面那样给 props 传入一个静态的值,但是我们更多的情况需要动态的数据。这时候就可以用 v-bind 来实现。通过v-bind绑定props的自定义的属性,传递去过的就不是静态的字符串了,它可以是一个表达式、布尔值、对象等等任何类型的值。

     

    父组件写法

    <template> <div>

        <users :message="子組件属性1"></users>
        <!--   这是一个javaScript表达式不是一个字符串-->
        <users :message="a+b"></users>
        <users :message="msg"></users> </div>
      </template>

    <script>
    import users from './testS'

    export default {  components: {  users  },

                data() { return { a:'我是子组件2',    b:12334,msg:'我是子组件3'+Math.random()}}}

    </script>

    子组件不变

     

     

    2 通过$ref实现通信

    ·如果ref用在子组件上,指向的是组件实例,可以理解为对子组件的索引,通过$ref可能获取到在子组件里定义的属性和方法。

    ·如果ref在普通的 DOM 元素上使用,引用指向的就是 DOM 元素,通过$ref可能获取到该DOM 的属性集合,轻松访问到DOM元素,作用与JQ选择器类似。

    子组件写法

    <template> <div >{{message}}</div></template>
    <script>  export default { data (){return{  message:''  } },
           methods:{ getMessage(m){ this.message=m;}}}
    </script>

    父组件写法

    <template> <div> <h1>这是父组件页面</h1> <users ref="msg"></users> </div></template>
    <script> import users from './testS'

    export default {

    components: { users},
               mounted:function(){

       console.log(this.$refs.msg);//控制台输出信息
               this.$refs.msg.getMessage('我是组件一');  }找到ref名为msg 的构造调用子组件方法

     </script>

     


    prop$ref之间的区别:

    prop 着重于数据的传递,它并不能调用子组件里的属性和方法。像创建文章组件时,自定义标题和内容这样的使用场景,最适合使用prop

    $ref 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。

     

     

    3 通过$emit实现通信  

    vm.$emit( event, arg )
    $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数。

    父组件写法

    <template> <div><h1>{{title}}</h1><sonn @getMessage="showMsg"></sonn></div></template>

    接收子组件名字为getMessage的$emit提交方法命名为showMsg
    <script> import sonn from './son';
        export default {components:{sonn},
          methods:{showMsg(title){this.title=title;}},showMsg方法里的数据拿出来
          data(){return{ title:''}},}
    </script>

    子组件写法

    <template><div><h3>这是子组件信息</h3></div></template>
    <script>export default {mounted:function() {this.$emit('getMessage','这是父组件') }}
               </script>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    生命周期

    1、beforeCreate

    在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

    2、created

    在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

    3、beforeMount

    在挂载开始之前被调用:相关的 render 函数首次被调用。

     

    该钩子在服务器端渲染期间不被调用。

    4、mounted

    el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。

     

    注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,

    5、beforeUpdate

    数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

     

    该钩子在服务器端渲染期间不被调用,因为只有初次渲染会在服务端进行。

    6、updated

    由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

     

    当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。

     

    注意 updated 不会承诺所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以用 vm.$nextTick 替换掉 updated

     

     

    7、activated

    keep-alive 组件激活时调用。

     

    该钩子在服务器端渲染期间不被调用。

    8、deactivated

    keep-alive 组件停用时调用。

     

    该钩子在服务器端渲染期间不被调用。

    9、beforeDestroy

    实例销毁之前调用。在这一步,实例仍然完全可用。

     

    该钩子在服务器端渲染期间不被调用。

    10、destroyed

    Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

     

    该钩子在服务器端渲染期间不被调用。

    11、errorCaptured

    当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

     

     

     

     

     

     

               vue

    杂记 脚手架

    console.log()控制台打印输出和alert()差不多   

    !important设置Css优先级最高

    display: flex; <div style=" flex: 1;"/></div>设置水平状态下div占的宽度比

    <style scoped>  设置作用域 只限于目前页面

    插值

    <template>写法
           <div v-once>{{su}}</div> 当标签中带v-once 时插值处的内容不会更新,但会影响其                             

    他节点上的数据绑定
          <input type="button" @click="insert" value="点击">

    computed:计算属性 

    <template>写法 <div>age+a={{addToA}}</div>

    methods: 中 computed:{addToA:function(){   return this.age+this.a  },

    data: 中 a:0,

    ref数据绑定

    <template> <input type="text"  ref="name"></input>
     <input type="button" @click="insert">

    methods:{  insert:function () { this.b=this.$refs.name.value; }},

    this.$refs.name.value;获取ref名为name的value值

        data:  function(){return{  n:'',}}}

    引图片

    <template> <img class="images" :src="imgSrc">

     data: imgSrc:"图片路径",

    For循环 循环数组

    1 <template> 页面中循环显示数组的方法

    <li v-for="(item , index) in brands[brand].category[cate].skill"
        @click="chooseCategories(index)" index 要查询的数组下标

    brands[brand] 数组[下标].skill数组内字段
       :class="[skillsIndex===index?'selectedShow choiceBox':'choiceBox']"
    >
        {{item.skills}} 显示数组内的字段

    </li>

     

    2  methods:中用For循环数组内数据

    for(let i in this.brands){ i是下标
        console.log(this.brands[this.brand]);
    }

    全局组件

      main页面设置

    Import User from ./components/Users //导包 Users是一个vue页面

    Vue.component(users,Users) //全局注册组件  

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    指令

    V-text

     更新元素的textContent。如果要更新部分的textContent,需要使用{{ Mustache }} 插值。

    <span v-text="msg"></span> <!-- 和下面的一样 --> <span>{{msg}}</span>

    V-html

    V-text一样 只是V-text是设置文本的 V-html渲染css

    <div v-html="html"></div>     data 里面的 html:'<h1>教程</h1>',

    v-if  判断文本中属性是否为确定的值,如果是就显示后面的属性,如不不是就不显示

    <h1 v-if="ok">Hello</h1>

    data (){ return {ok:true,}}

    默认判断ok 属性是否为true 是就显示Hello 不是就显示为空

    v-show

    也是根据条件来展示元素的,和v-if的功能类似。但是v-show中如果条件为false就生成代码不显示。而v-if如果条件为false,就直接不生成代码。

     

    v-ifv-else   v-else 元素必须紧跟在带 v-if 或者 v-else-if 的元素的后面,否则它将不会被识别。

     <div v-if="Math.random()>0.5">
        sorry
      </div>
      <div v-else>
        not sorry
      </div>
    </div>

     

    判断Math.random()>0.5 是的话就输出sorry 不是就输出 not sorry

    v-else-if

    <div v-if="show === 'ab'">ab</div>
    <div v-else-if="show === 'b'">b</div>
    <div v-else-if="show === 'c'">c</div>
    <div v-else>abcde</div>

     

    data (){
       return {
            show:'cb',
      }

    判断字符串是否为ad 是否为b 是否为c 否则显示abcde

     

     

     

     

     

     

    V-for

    <template>

    <div>
          <ul>
            <li v-for="todo in tods "> 或者"(todo i) in tods " 键是i 值是todo
              {{todo.txt}}
            </li>
          </ul>
        </div>
    </template>

     

    <script>

    data (){
       return {

    tods:[
      {txt:'你好'},
      {txt:'数组'},
      {txt:'函数'},
    ]

    </script>

    循环获取 tods里的值

    或者

      <li v-for="todo in tods ">
              获取 id {{user.id}}  获取姓名{{user.name}}

     </li>

    v-for 迭代数字

     <ul>
        <li v-for="todo in 10 ">
          这是第{{todo}}循环
        </li>
    </ul>

     

    V-on 事件<a v-on:click="doThis"></a> 缩写 <a @click="doThis"></a>

    事件修饰符v-on:click

    1 <!-- 阻止单击事件继续传播 --> <a v-on:click.stop="doThis"></a>

    2 <!-- 点击事件将只会触发一次 --> <a v-on:click.once="doThis"></a>

    3<!-- 提交事件不再重载页面 --> <form v-on:submit.prevent="onSubmit"></form> 4<!-- 修饰符可以串联 --> <a v-on:click.stop.prevent="doThat"></a>

    5 <!-- 只有修饰符 --> <form v-on:submit.prevent></form> 

    6 <!-- 添加事件监听器时使用事件捕获模式 --> 

    <!-- 即元素自身触发的事件先在此处理,然后才交由内部元素进行处理 --> 

    <div v-on:click.capture="doThis">...</div> 

    7 <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->

     <!-- 即事件不是从内部元素触发的 --> <div v-on:click.self="doThat">...</div>

    提示:v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。

    键值修饰符@keyup

    <template> <div>{{n}}</div> <input type="text"  ref="name" @keyup="insert"></input>

    v-on:keyup跟随键盘输入调用insert方法

    methods: { insert:function () { this.n=this.$refs.name.value;}},

    data:  function(){ return{ n:'', } }}

    如果v-on:keyup.enter 这样写只有按回车键才能触发里面的方法

     

    v-on:input 标签 跟随键盘输入调用方法

    页面

    <el-col :span="4">
          <el-input placeholder="详细地址(最多输入50个字符)" v-model="data.address"       @input="inputFunction()" :maxlength="30"></el-input>:maxlength="30"//限制输入30个字符
        </el-col>
        <el-col :span="5" >输入{{insert}}个字符</el-col>

    方法

    methods: {
          inputFunction(){
              this.insert=this.data.address.length
          }},

    data

    data() {  return { insert:''}},

     

     

     

     

     

    elementUi组件下拉框绑定事件无效的解决方案

     

    正确打开方式 @click.native绑定点击事件

    <el-dropdown>

              <span class="el-dropdown-link" ref="echarType">

               柱状图<i class="el-icon-arrow-down el-icon--right"></i>

              </span>

              <el-dropdown-menu slot="dropdown" >

                <el-dropdown-item>柱状图</el-dropdown-item>

                <el-dropdown-item @click.native="seeTable">表格</el-dropdown-item>

              </el-dropdown-menu>

            </el-dropdown>

     

     

    V-bind css绑定  <div v-bind:class={src} </div> 缩写 <div :class={src} </div>

    1 绑定一个图片 <img :src="src"></img> 在data中写地址src:"static/test.jpeg",

    2  绑定HTML Class   Class 绑定

    <div :class="{'textClor':isColor,'textSize':fontsize}">span</div>

    Data中写 isColor:true, fontsize:true,

    Style中写 .textClor{ text-color: aqua;}    .textSize{font-size: 50px;}

    也可以直接绑定数据里的一个对象:

     <template>中写法 <div :class="classObject">span</div>

    Data中写 classObject:{'textClor':true,  'textSize':false,}

    Style 不变

    * 数组语法

      <template>中写法<div :class="[classa,classb]">span</div>

     Data中写  classa:'textClor', classb:'textSize',

    Style 不变

       

    * 当有多个条件时也可以使用对象语法

    <div v-bind:class="[{ active: isActive }, errorClass]"></div> 

    3 style 绑定

     <template>写法<div :style="{color:activeClor,fontSize:fontSize +'px'}">span</div>

    Data 中写法   activeClor:'red',   fontSize:30,

          * 直接绑定到一个样式对象通常更好,这会让模板更清晰:        

       <template>写法<div :style="text">span</div>

    Data 中写法text:{  color:'red',fontSize:'30px',}

          *数组写法

     <template>写法<div :style="[styleObjectA,styleObjectB]">span</div>

    Data 中写法   styleObjectA:{  color:'red', fontSize:'30px'},
          styleObjectB:{  textDecoration:'underline'  }添加下划线样式

    *多重值

    2.3.0 起你可以为 style 绑定中的属性提供一个包含多个值的数组,常用于提供多个带前缀的值,例如:

    <div :style="{ display: ['-webkit-box', '-ms-flexbox', 'flex'] }"></div>

    这样写只会渲染数组中最后一个被浏览器支持的值。在本例中,如果浏览器支持不带浏览器前缀的 flexbox,那么就只会渲染 display: flex

     

    v-model  表单控件绑定

          可以用 v-model 指令在表单控件元素上创建双向数据绑定。根据控件类型它自动选取正确的方法更新元素。尽管有点神奇,v-model 不过是语法糖,在用户输入事件中更新数据,以及特别处理一些极端例子。

         1*Text

            <template>写法

    <div>{{mess}}</div>显示用户输入的值
    <input type="text" v-model="mess" placeholder="请输入值"><br>

    Data写法 mess:'', 定义一个空的值

     

    2* Multiline text 多文本输入checkbox

      <template>写法 

       <div>{{message}}</div>显示用户输入的值

       <textarea v-model="message" placeholder="添加多行"></textarea>

       Data写法message:'', 定义一个空的值

    3* 多选框

      <template>写法 

     <div>{{mo}}</div>如果点击就显示为true 如果没点击就显示false
     <input type="checkbox"  v-model="mo">

        Data写法 mo:false, 定义一个为false的值

    4* 多个勾选框 绑定到同一个数组

    <template>写法

     <input type="checkbox" id="jack" value="Jack" v-model="checkedNames">
     <label for="Jack">Jack</label>
     <input type="checkbox" id="john" value="John" v-model="checkedNames">
     <label for="john">John</label>
     <input type="checkbox" id="mike" value="Mike" v-model="checkedNames">
     <label for="mike">Mike</label>  <br>
     <span>Checked names: {{ checkedNames | json }}</span>

     *Data写法checkedNames:[],定义一个空的数点击后的值存入mike|john|Jack数组中

    其中 input中的id要与label中的for属性值要一致

    5* radio 只能选一个的多选框

      <input type="radio" id="one" value="One" v-model="picked">
        <label for="one">One</label><br>
         <input type="radio" id="two" value="Two" v-model="picked">
      <label for="two">Two</label> <br>
      <span>Picked: {{ picked }}</span>

    Data中定义个变量接收信息

      picked:[],

    7 单选框

    <template>写法

    <select v-model="sel">
      <option selected>A</option>
      <option>B</option>
      <option>C</option>
    </select>
    <span>Sel: {{ sel}}</span>

    Data中定义个变量接收信息

      data: function () {return { sel:'',  }

    8 debounce 设置一个最小的延时,在每次敲击之后延时同步输入框的值与数据。如果每次更新都要进行高耗操作(例如在输入提示中 Ajax 请求),它较为有用。

    <input v-model="msg" debounce="500*200">

     

     

    父子组件传值

    1 通过prop实现通信

    子组件的props选项能够接收来自父组件数据。没错,仅仅只能接收,props是单向绑定的,即只能父组件向子组件传递,不能反向。而传递的方式也分为两种:

    静态传递

    子组件通过props选项来声明一个自定义的属性,然后父组件就可以在嵌套标签的时候,通过这个属性往子组件传递数据了。

    * 传页面

     在子面写入组件<template><div style="color: red">  hello world </div></template>

    在父页面引用子组件页面 import ssss from './ssss'

     调用   export default { components: {ssss},}

    页面就可以调用子页面的组件了<template><ssss></ssss></template>

    * 传自定义属性

         子组件写法

    <template> <div >{{message}}</div></template>

    export default {props:['message'],  data (){  return{ na:'子组件页面', }}

    严谨的写法

    Props:{users:{type:Array,required:true}}//type:Array传递的类型

    父组件写法

    <template> <div>  <users :message="子組件属性"></users>  </div></template>

          <script> import users from './testS' 引入子组件地址  

    export default {components: { users},</script> 实例化子组件

    动态传递

    我们已经知道了可以像上面那样给 props 传入一个静态的值,但是我们更多的情况需要动态的数据。这时候就可以用 v-bind 来实现。通过v-bind绑定props的自定义的属性,传递去过的就不是静态的字符串了,它可以是一个表达式、布尔值、对象等等任何类型的值。

     

    父组件写法

    <template> <div>

        <users :message="子組件属性1"></users>
        <!--   这是一个javaScript表达式不是一个字符串-->
        <users :message="a+b"></users>
        <users :message="msg"></users> </div>
      </template>

    <script>
    import users from './testS'

    export default {  components: {  users  },

                data() { return { a:'我是子组件2',    b:12334,msg:'我是子组件3'+Math.random()}}}

    </script>

    子组件不变

     

     

    2 通过$ref实现通信

    ·如果ref用在子组件上,指向的是组件实例,可以理解为对子组件的索引,通过$ref可能获取到在子组件里定义的属性和方法。

    ·如果ref在普通的 DOM 元素上使用,引用指向的就是 DOM 元素,通过$ref可能获取到该DOM 的属性集合,轻松访问到DOM元素,作用与JQ选择器类似。

    子组件写法

    <template> <div >{{message}}</div></template>
    <script>  export default { data (){return{  message:''  } },
           methods:{ getMessage(m){ this.message=m;}}}
    </script>

    父组件写法

    <template> <div> <h1>这是父组件页面</h1> <users ref="msg"></users> </div></template>
    <script> import users from './testS'

    export default {

    components: { users},
               mounted:function(){

       console.log(this.$refs.msg);//控制台输出信息
               this.$refs.msg.getMessage('我是组件一');  }找到ref名为msg 的构造调用子组件方法

     </script>

     


    prop$ref之间的区别:

    prop 着重于数据的传递,它并不能调用子组件里的属性和方法。像创建文章组件时,自定义标题和内容这样的使用场景,最适合使用prop

    $ref 着重于索引,主要用来调用子组件里的属性和方法,其实并不擅长数据传递。而且ref用在dom元素的时候,能使到选择器的作用,这个功能比作为索引更常有用到。

     

     

    3 通过$emit实现通信  

    vm.$emit( event, arg )
    $emit 绑定一个自定义事件event,当这个这个语句被执行到的时候,就会将参数arg传递给父组件,父组件通过@event监听并接收参数。

    父组件写法

    <template> <div><h1>{{title}}</h1><sonn @getMessage="showMsg"></sonn></div></template>

    接收子组件名字为getMessage的$emit提交方法命名为showMsg
    <script> import sonn from './son';
        export default {components:{sonn},
          methods:{showMsg(title){this.title=title;}},showMsg方法里的数据拿出来
          data(){return{ title:''}},}
    </script>

    子组件写法

    <template><div><h3>这是子组件信息</h3></div></template>
    <script>export default {mounted:function() {this.$emit('getMessage','这是父组件') }}
               </script>

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    生命周期

    1、beforeCreate

    在实例初始化之后,数据观测 (data observer) 和 event/watcher 事件配置之前被调用。

    2、created

    在实例创建完成后被立即调用。在这一步,实例已完成以下的配置:数据观测 (data observer),属性和方法的运算,watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。

    3、beforeMount

    在挂载开始之前被调用:相关的 render 函数首次被调用。

     

    该钩子在服务器端渲染期间不被调用。

    4、mounted

    el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。如果 root 实例挂载了一个文档内元素,当 mounted 被调用时 vm.$el 也在文档内。

     

    注意 mounted 不会承诺所有的子组件也都一起被挂载。如果你希望等到整个视图都渲染完毕,

    5、beforeUpdate

    数据更新时调用,发生在虚拟 DOM 打补丁之前。这里适合在更新之前访问现有的 DOM,比如手动移除已添加的事件监听器。

     

    该钩子在服务器端渲染期间不被调用,因为只有初次渲染会在服务端进行。

    6、updated

    由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。

     

    当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态。如果要相应状态改变,通常最好使用计算属性或 watcher 取而代之。

     

    注意 updated 不会承诺所有的子组件也都一起被重绘。如果你希望等到整个视图都重绘完毕,可以用 vm.$nextTick 替换掉 updated

     

     

    7、activated

    keep-alive 组件激活时调用。

     

    该钩子在服务器端渲染期间不被调用。

    8、deactivated

    keep-alive 组件停用时调用。

     

    该钩子在服务器端渲染期间不被调用。

    9、beforeDestroy

    实例销毁之前调用。在这一步,实例仍然完全可用。

     

    该钩子在服务器端渲染期间不被调用。

    10、destroyed

    Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

     

    该钩子在服务器端渲染期间不被调用。

    11、errorCaptured

    当捕获一个来自子孙组件的错误时被调用。此钩子会收到三个参数:错误对象、发生错误的组件实例以及一个包含错误来源信息的字符串。此钩子可以返回 false 以阻止该错误继续向上传播。

     

     

     

     

     

     

    窗竹影摇书案上,野泉声入砚池中。 少年辛苦终身事,莫向光阴惰寸功
  • 相关阅读:
    含字母的数字排序
    ci中简单实用的权限管理
    时间戳和日期转换
    prop
    定时器
    centos查看防火墙策略是firewall还是iptables
    centos上安装rabbitmq服务器
    springcloud微服务feign消费模式解决 com.netflix.client.ClientException: Load balancer does not have available server for client:xxx
    java正则去掉json字符串key的引号
    centos安装redis
  • 原文地址:https://www.cnblogs.com/qhantime/p/11160141.html
Copyright © 2011-2022 走看看