基础Vue知识,你都弄懂了吗

12.v-else-if

Vue

  • vue是一个渐进式的js框架,只注重图层,结合了html+css+js,非常的易用,并且有很好的生态系统。而且vue体积很小,速度很快,优化很到位。
  • ssm的整合,搞定了后端一套:增删改查。

2.MVVM

  • vue技术是mvvm开发模式的实现者

MVC: model view controller

MVVM: model view viewmodel:连接视图和数据的中间件。

  • VM的实现:

  1. 视图变了,通知数据进行变化
  2. 数据变了,通知视图发生变化
  3. ----MVVM通过VM实现了双向数据绑定。

3.cdn内容

这是一种快速策略,能够从离自己最近的服务器上快速获得外部的资源。

4.vue的快速起步

  • 两个部分

  1. html:<div id="app"></div>
  2. 需要一个vue对象实例。

5.差值表达式

  • html中被绑定元素中的,获取vue对象的属性和方法

  • !!!差值表达式不能写在html的标签中,不能作为属性的值的部分。 解决方法是用v-bind进行属性绑定,v-bind:href="link" === :href="link"

6.Vue的关键字

  • v-model:是vue和data属性值进行绑定

  • <input type="text" v-model="value"/>
    new App({
        data(){
            return {
                value:'请输入'
            }
        }
    })
  • .v-on:click=“”同过配合具体事件名,来绑定vue中的函数

  1. 在响应函数里,用event内置对象,对象表示当前事件,通过event.target.value来获得当前事件对象value的值。
  2. this的用法:this指向的vue对象。通过this调用当前vue的属性和方法
  3. v-on:click="" === @click=""
  4. v-once,表示数据只改变一次
  5. v-html="”,将vie中的属性的值作为html元素来使用,v-text会将vue中的属性只作为纯文本使用

7.事件修饰符

  1. event.preventDefault()
  2. event.stopPropagation()
  3. .stop,.prevent,.capture,.self,.once,.passive

8.computed计算属性

  • methods每次调用都执行一遍,而computed是能够将计算结果缓存起来的属性(将行为转化为静态的属性),提高效率。
  • 在调用computed里存放的函数时,不能加()
  • !!!因为computed返回的是缓存的属性

<div>{{change}}</div>
computed:{
    change(){
        return value=""
        //computed可以返回一个对象,放着多个键值对
        return {red:this.temp,mywidth: this.temp}
    }
}

9.watch监控属性

  • watch给属性绑定函数,当属性改变时,该函数主动调用,调用时可以接收两个参数,第一 个参数是属性改变后的值,第二个参数是属性改变前的值

10.Vue改变样式

  • <div :class="{red:temp}"/>,data中定义temp是true时 >>> class为red
  • class绑定多个样式(:class="[mydiv,red]"),用数组
  • 内联样式 :style=“[myStyle, {height:myHeight+'px'}]

!!!面试题

11.Vue的核心:虚拟DOM和diff算法

 12.v-else-if

<div id = "app">
    <div v-if=" temp">看到我了</div>
    <div v-else-if=" temp">前方高能</div>
    <div v-else=" temp">看到他了</div>
    <button type="button" @click="temp = !temp">点我</button>
</div>

13.v-show!!!面试题

14.v-for

  • 改进版:for语句中,key建议加上,作为标识,i是下标
  • v-for=“(v,k,i)in student”{{i}}{{k}}{{v}}
    <ul>
        <li v-for=""(str,i) in args" :key="i">
            {{str}}{{i}}
        </li>
    </ul>
  • 遍历一个对象数组:用嵌套(渲染列表)
    <tr v-for="(user,i) in users" :key="i">
      <td>{{i + 1}}</td>
      <td v-for="value in user">{{value}}</td>
    </tr>
    new Vue({
        el:'#app',
        data:{
            users:[
                {
                    name:'小明',
                    age:20,
                    tel:'1888888888'    
                },
                {
                   name:'小❀',
                    age:21,
                    tel:'18824323423'  
                } 
            ]
        }
    })
    <div id="app">
        {{title}}
        <button type="button" @click="toUpCase">点我</button>
        {{toLowerCase}}
    </div>
    new Vue({
        el:'#app',
        data:{
            title:"Hello Vue"
        },
        methods:{
           toUpCase:function(){
           this.title = this.title.UpperCase();
           } 
        },
        computed:{
            toLowerCase:function(){
                return this.title.toLowerCase();
            }
        }    
    })

    Vue进阶

    1.vue对象之间的操作

  • 通过一个vue对象操作另一个vue对象

  • <div id="app">
        {{title}}
        <button type="button" @click="changeOtherVueTitle">点我</button>
        {{toLowerCase}}
    </div>
    var v1 = new Vue({
        el:'#app',
        data:{
            title:"Hello Vue"
        },
        methods:{
           toUpCase:function(){
           this.title = this.title.UpperCase();
           } 
        },
        computed:{
            toLowerCase:function(){
                return this.title.toLowerCase();
            }
        }    
    })
    
    var v2 = new Vue({
        el:'#app2',
        methods:{
           changeOtherVueTitle:function(){
           v1.title="hello java"
           } 
        }   
    })
  • vue对象操作另一个vue对象的内容,维度有两个,操作属性、操作方法

  1. 这些属性是data和computed里面定义的
  2. vue的实例属性:data和computed
  • vue的对象实例:

  1. 直接通过对象.的方式调用的属性,来自data和computed中的属性,但是vue对象中el和data等也称为属性。
    v1.$data.title = v1.title
  2. 实例属性ref:替代id(原因:相同的id不会报错):快速通过调用ref获得页面中的某个元素。
    <button ref="mybtn1" @click="">点我</button>
    this.$refs.mybtn1.innerHTML = "hello"
  3. 动态绑定vue实例到页面中,mount加载的意思:实现页面元素和vue动态绑定,之前通过el
  4. <div id="#app3"></div>
    <script>
        var v3 = new Vue({
            template: "<h1>hello</h1>"
        })
        v3.$mount("#app3")
    </script>

2.vue组件的使用

  • 注册组件:component

实现组件化,需要在页面中注册组件,分别是全局注册和本地注册。

  • template里有且只有一个根元素

<model></model>
Vue.component("model",{
    template: "<button @click>hello</button >",
    methods:{
        
    }
})//vue对象
  • 区别:

  1. data的定义:vue实例中data:{},组件中data:function(){return{}}
  • vue组件的本地(局部注册)

  • new Vue({
        el:"#app",
        components:{
            "model1":{}//只有id是app的div才可以使用
        }
    })

    3.vue的生命周期

  • 不能用箭头函数定义一个生命周期方法
  • 初始化,创建,绑定,更新,销毁等阶段

     4.vue结合bootstrap搭建首页

  1. 引入cdn搭建vue.js文件<script>
  2. 引入bootstrap.js文件

vue-cli和node.js

  • 我们后端使用maven创建项目,一是通过maven的依赖机制,能够快速的管理依赖。二是通过maven确定项目的结构,所谓项目的结构就是项目里有哪些文件和文件夹。

  • node.js来安装vue-cli脚手架:

  1. node -v
  2. npm install vue-cli -g
  3. vue list //骨架名
  4. vue init 骨架名 项目名
  5. npm install //安装依赖
  6. npm run dev

webpack-simple项目结构:

  • index.html:无论前端页面内容多复杂,index.html都只有11行,实际内容已经被打包(/dist/build.js)
  • app.vue
  • 在idea支持Vue插件

Vue的三大组成

  • template,script,style
  • 在App.vue使用另一个vue组件

全局注册:

  • 在main.js中,通过import和Vue.component配合,来将一个.vue文件注册成为一个标签,可以在全局使用。

本地注册:

  • 在vue中,通过import和Vue.component配合,来将一个.vue文件注册成为一个标签,可以在全局使用。

组件参数传递

参数传递:data,computed,props

  • 父传子

props['MyProp1','MyProp2']
props:{
myName:{
type: String,
required: true,
default:'xx'	//不传值就有默认值
}
}

父亲
<my-content :mytitle="msg"></my-content>
data(){
    return{msg:"hello vue!!!"}
}
儿子
{{mytitle}}
props:['mytitle']
  • 改进版传递参数

子,使用this.$emit("键","值")
doClick:function(){
    this.$emit('newName','xiaoliu')
}
父, @键="msg=$event",msg是父组件中vue的属性。
<sub-app :myName="name" @newName="name=$event"></sub-app>

http请求--Axios

  • Axios:开源的可以在浏览器和node.js异步通信框架,主要实现ajax异步通信(不支持ajax通信功能)

  • 过程:

  1. 安装axios
  2. 在main.js引入
  3. 发送ajax请求
//get请求
@click="request"
request:function(){
    this.axios({
        method:'get',
        url:'http://localhost:8090/register?mail='+this.mail+'&password='+this.password,
        data:{}
    }).then(function(response){
        console.log(response.data)
    })
}

解决跨域问题:

  • 跨域问题:浏览器不能执行其他网站的脚本。

  • 解决:

    1.使用CORS解决跨域问题,允许浏览器发送XMLHttpRequest请求,需要浏览器和服务器都支持,目前所有浏览器都支持。只要服务器实现了CORS接口,就可以在跨源通信中设置("Acces-Control-Allow-Origin",“*”)

    2.JSONp

路由问题:

  • 连接两个交换机(两个不同局域网的通信)

  1. 安装路由模块:npm install vue-router -s
  2. 创建components文件夹,分别创建user、home组件
  3. 引入路由模块main.js
import VueRouter from 'vue-router'//引入路由模块
import {routes} from './routes'  //引入静态路由表
Vue.use(VueRouter);
const router = new VueRouter({
    routes:routes
});
new Vue({
    el:"#app",
    router,    //router放在实例当中
    render:h=>h(App)
})

  1. 创建静态路由表routes.js
    import Home from '@/components/Home'
    import user from '@/components/Products'
    
    export const routes = [//暴露一个路由
        {
            path:'/Home',
            components:Home
        },{
            path:'/Products',
            components:Products
        }
    ]
  2. 应用:导航栏的切换
    <div>
    <span>
        <router-link to="/Home">首页</router-link>
    </span>
    <span>
        <router-link to="/Products">商品列表</router-link>
    </span>
    </div>
    <router-view></router-view>//显示路由表里组件的内容

参数的传递

1.路由传参

  • header.vue传递参数

<router-link to="/Home/10">首页</router-link>

  • 路由表routes.js

export const routes = [//暴露一个路由 { path:'/Home/:id', components:Home },

  • home.vue接收参数:通过$route.params.id

<p>{{id}}</p>
data(){
    return {
        id:this.$route.params.id
        products:[]
    }
}
created:{
    console.log(this.id)
    //发送axios,请求后端接口,获得所有手机的商品列表,填充到this.products
}

2.传递复杂的参数

<router-link to="{name:'Product',params:{id:1001}}">首页</router-link>

路由之间跳转的方式

  • 通过html中的路由<li role="presenration>"<router-link to="路由地址">首页</router-link></li>
  • 通过js跳转
  1. 绑定事件
  2. this.$router.push("/Phone/Products/1")

关于静态资源打包:

  1. vue-cli
  2. 安装依赖
  3. npm run dev,实时效果是由vue-cli进行打包给node.js上的
  4. 开发完成以后,资源需要我们手动部署在自己的服务器上,使用npm run build构建资源 >>> 生成dist文件夹(打包了所有资源)
  5. 手动把图片放在dist文件夹,修改好vue中的图片路径,

Mock假数据

  1. 假数据,让前端不需要等待后端的接口,而直接进行下一步的开发,常用工具easy Mock 在发送axiios请求的时候,如何调用当前vue对象的内容

(因为axios内部then内的this是当前的axios对象,而不是vue,因此把当前vue对象用vm来指明。)

created(){
    var vm = this; 
        this.axios({
            method:'get',
            url:'http://localhost:8090/register?mail='+this.mail+'&password='+this.password,
            data:{}
        }).then(function(response){
            console.log(response.data)
        })
    }
}

嵌套路由(子路由)

  • 在路由显示的组件内部,又嵌套着路由,成为子路由。在router中配置
export default new Router = ({
    ,{
        path:'/Home',
        name:'Home'
        components:Home,
        children:[
            {
                path:'/productList',
                name:'productList',
               component:productList,
            }
        ]
    }
})

  • 路由的重定向

  1. 直接调用另一个配置好的路由对象即可。

routes = [//暴露一个路由
    {
        path:'/Home',
        component:Home
    },
    {
        path:'/Logout',
        redirect:/Home
    }
]

路由的钩子函数

  • beforeRouteEnter,在进入路由前执行
  • beforeRouteLeave,在离开路由前执行
  • beforeRouteEnter:(to,from,next) => {
        console.log("准备进入");
        next(
        console.log("进入目标之后调用的函数"));
    }
    beforeRouteLeave:(to,from,next) => {
        console.log("准备离开");
        next();
    }

加油!!!

本人是新手,如有错误请留言更正,谢谢各位小老师❀❀❀❀❀❀

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值