vue基础学习笔记

Vue框架

javascript框架
简化dom操作
响应式数据驱动

第一个Vue程序

  • 导入开发版本的Vue.js
  • 创建Vue实例对象,设置el属性和data属性
  • 创建简洁的模板语法把数据渲染到页面上
<body>
 <!-- 3.view层 模板 -->
    <div id="app">
        {{ message }}
    </div>
    <!-- 1.开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
    
        var app = new Vue({
            el:"#app",
            //  model 数据 
            data:{
                message:"Hello Vue!"
            }
        })
    </script>
</body>

el挂载点

作用:el是用来设置Vue实例挂载(管理)的元素

  • 范围:Vue会管理el选项命中的元素及其内部的后代元素
  • 可以使用多种选择器,但是常用id选择器
  • 设置的Dom元素:可以使用其他的双标签,不能使用htmlbody

data数据对象

  • Vue的数据定义在data中
  • data可以表现复杂的数据,需要遵守js的语法
        字符串{{ message }}
        对象<h2>{{school.name}}</h2>
        <ul>
            <li>数组{{campus[0]}}</li>
        </ul>
       data:{
                message:"Hello Vue!",
                school:{
                    name:"heima"
                },
                campus:["beijing"]
            }

Vue指令

  1. 内容绑定,事件绑定
  2. 显示切换,属性绑定
  3. 列表循环,表单元素绑定

内容绑定v-text,v-html

v-text指令可以设置标签的内容
默认写法会替换全部内容,使用差值表达式{{}}可以替换指定内容
v-html指令设置元素的innerHTML
内容有html结构的会被解析为标签,v-text只会解析为文本

事件绑定v-on

事件有点击,移动,鼠标移入移出等
形式:v-on:事件名=“方法名”
可简写为:@事件名=“方法名”,
具体的方法实现方式写在script中,
this可以获得该实例对象,对数据进行相应的操作

<!-- 2.HTML结构 -->
    <div id="app">
        <!-- <input type="button" value="v-on指令" v-on:click="doIt"> -->
        <input type="button" value="v-on指令" @click="changeFood">
        <p v-text="food"></p>
    </div>
        <!-- 1.开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
    <script>
    <!-- 3.创建Vue实例 -->
        var app = new Vue({
            el:"#app",
            data:{
                food:"西红柿鸡蛋"
            },
            methods:{
                doIt:function(){
                    alert('做IT')
                },
                changeFood:function(){
                    this.food+='好吃!'
                }
            }
        })
    </script>

事件绑定的方法写成函数调用的形式,可以传入自定义参数
定义方法时需要定义形参来接收传入的参数
事件的后面跟上.修饰符可以对事件进行限制

<input type="button" value="点击" @click="doIt(666,'老铁')">
<input type="text" value="" @keyup.enter="sayHi">

    methods:{
        doIt:function(p1,p2){
            console.log(p1);
            console.log(p2)
        },
        sayHi:function(){
            alert("吃了吗")
        }
    }

显示切换v-show,v-if

v-show,v-if功能相同,都是根据表达式的真假,切换元素的显示和隐藏
形式:v-show=“true"后边是布尔值,可以为布尔值,变量,表达式。
v-show=“age>10”
v-if是直接操作dom元素的,进行添加和删除。v-show是操作属性display的。

属性绑定v-bind

作用:设置元素的属性(比如src,title,class)
形式:

<div>
  <img v-bind:src="imgSrc">
  <img v-bind:title="imgetitle+'!!!'">
  <img v-bind:class="isActive?'active':''">
  <img v-bind:class="{active:isActive}">
  <img :src="imgSrc"> 简写形式
</div>
var app = new Vue({
 el:"#app",
 data:{
 imgSrc:"图片地址",
 imgTitle:"黑马程序员",
 isActive:false
 }
 })

v-for列表循环

根据数据生成列表结构
数组经常和v-for结合使用
语法是(item,index) in 数据
数组长度的更新会同步到页面上,是响应式的

    <div id="app">
        <ul>
            <li v-for="(item,index) in arr">
            <!-- 注意item顺序 -->
                {{index}}-{{item}}
            </li>
        </ul>
    </div>

v-model表单元素绑定

获取和设置表单元素的值(双向数据绑定)
data和模板表单里的数据是对应的
绑定的数据<–>表单元素的值

        <input type="button" value="设置m" @click="setM">
        <input type="text" v-model="message1" @keyup.enter="getM">
        {{message1}}
            data:{
                message1:"hello",
            },
            methods:{
                getM:function(){
                    console.log(this.message1)
                },
                setM:function(){
                    this.message1 = "kkkk"
                }
            }
  下拉选择框
 <select v-model="selected">
    <option value="" disabled>请选择</option>
    <option>A</option>
    <option>B</option>
    <option>C</option>
  </select>
  选中了{{selected}}

组件注册和使用component

<div id="app">
    <zujian v-for="item in items" v-bind:param="item"></zujian>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script>
  Vue.component("zujian",{
    props:['param'],
    template:'<li>{{param}}</li>'
  });
  var vm = new Vue({
    el: "#app",
    data: {
      sex: "abc",
      selected:"",
      items:["java","python","sql"]
    }
  });
</script>

生命周期和钩子函数mounted

参考:https://blog.csdn.net/qq_45890970/article/details/123120797
1.每个 Vue 实例在被创建时都要经过一系列的初始化过程——例如,需要设置数据监听、编译模板、将实例挂载到 DOM 并在数据变化时更新 DOM 等。同时在这个过程中也会运行一些叫做生命周期钩子(生命周期回调函数、生命周期函数)的函数,这给了用户在不同阶段添加自己的代码的机会。
2.一个组件的 data 选项必须是一个函数,因此每个实例可以维护一份被返回对象的独立的拷贝,否则会影响到其它所有实例

<div id="vue">
{{info.address.street}}
  <a v-bind:href="info.url">{{ info.url }}</a>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>

  var vue = new Vue({
    el: "#vue",
    data(){ // 上述2
      return{ // 请求的返回参数合适,必须和json字符串一样
        info:{
        }
      }
    },
    mounted(){ //上述1,钩子函数,链式编程,ES6新特性
      axios.get('data.json').then(response=>(this.info = response.data))
    }
  })
</script>

计算属性computed

计算出来的结果保存在属性中,内存中运行,相当于缓存,不常用的东西可以缓存,节约系统开销

<div id="vue">
<!--  currentTime1是方法,需要带(),currentTime2是属性,直接写就ok-->
{{currentTime1()}} 
  {{currentTime2}}
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>

  var vue = new Vue({
    el: "#vue",
    data(){ // 避免
      return{
        message: "hello,liu"
      }
    },
    methods: {
      currentTime1: function (){
        return Date.now();
      }
    },
    computed: {
      currentTime2: function () { //方法内数据有更新后,重新计算属性currentTime2
        this.message; 
        return Date.now();
      }
    }
  })
</script>

内容分发-slot插槽

提高代码灵活性,代码复用

<div id="app">
  <todo>
    <todoitem slot="todoitem" :title1="k1"></todoitem>
    <todoli slot="todoli" v-for="ll in todoItemss" v-bind:lidata="ll"></todoli>
  </todo>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
  Vue.component("todo",{
    template: '<div>' +
      '<slot name="todoitem"></slot>'+
      '<ul>' +
      '<slot name="todoli"></slot>'+
      '</ul>'+
    '</div>'
  });
  Vue.component("todoitem",{
    props: ["title1"],
    template: '<p >{{title1}}</p>'
  });
  Vue.component("todoli",{
    props: ["lidata"],
    template: '<li>{{lidata}}</li>'
  })
  var vm = new Vue({
    el: "#app",
    data: {
      k1: "list",
      todoItemss: ["a","b","c"]
    }
  })
</script>
<div id="app">
  <todo>
    <todoitem slot="todoitem" :title1="k1"></todoitem>
    <todoli slot="todoli" v-for="(ll,index1) in todoItemss" v-bind:lidata="ll"
            v-bind:indexcom="index1" v-on:removedef="removevm" ></todoli>
            removedef自定义事件=Vue实例的事件
  </todo>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
  Vue.component("todo",{
    template: '<div>' +
      '<slot name="todoitem"></slot>'+
      '<ul>' +
      '<slot name="todoli"></slot>'+
      '</ul>'+
    '</div>'
  });
  Vue.component("todoitem",{
    props: ["title1"],
    template: '<p >{{title1}}</p>'
  });
  Vue.component("todoli",{
    props: ['lidata','indexcom'], //indexcom不要有大写字母的变量名
    template: '<li>{{lidata}} <button @click="removecom(indexcom)">删除</button></li>',
    methods: {
      removecom:function (indexcom) {
        this.$emit('removedef',indexcom)
      }
    }
  })
  var vm = new Vue({
    el: "#app",
    data: {
      k1: "list",
      todoItemss: ["a","b","c"]
    },
    methods: {
      removevm: function (param1) {
        this.todoItemss.splice(param1,1)
      }
    }
  })
</script>

组件<=>前端 <=> Vue实例,通过前端的双向绑定功能,利用$emit自定义事件实现组件对Vue实例的操作。
网络通信:axios
页面跳转:vue-router
状态管理:vuex
npm:项目综合管理工具,类似于maven
vue特色:计算属性
MVVM:VM:vue.js连接数据和视图的,DOM监听和数据绑定。数据<=>视图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值