VUE2基础

Vue2.0-28.总结_哔哩哔哩_bilibili

https://docs.qq.com/mind/DYU9FRW92S3BLV0R4

初识VUE

vue是一套用于构建前端用户界面的前端框架

用vue往HTML页面填充数据非常的方便

框架是一套现成的解决方案,程序员只能遵守自己的规范,去编写自己的业务功能

vue的指令、组件(是对UI结构的复用)路由,vuex,掌握了这些就掌握了vue

vue的特性主要体现在数据驱动视图、双向数据绑定

数据驱动视图

好处是页面数据变化时,页面会自动重新渲染(程序员不用再操作DOM,只需只要维护数据,页面就可以自动渲染)

需要注意的是数据驱动视图是单向的数据绑定(这是一个单向的过程,所以页面结构变化不会改变数据)

链接:请你说说vue的特性__牛客网
来源:牛客网
 

1.轻量级的框架

    vue是MVVM数据绑定和可组合的组件系统,灵活的api,易上手

2.数据双向绑定

    通过数据劫持结合发布者-订阅者模式,利用object.defineProperty重写对象get和set方法,当访问属性是触发get方法,修改属性值时触发set方法,之后更新对应的DOM节点。

3.指令

    vue主要通过指令也页面进行交互,如:v-model、v-if、v-show、v-for。

4.组件

    组件是可复用的 Vue 实例。

5.路由

    路由用于构建单页面应用。Vue 单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来

6.状态管理

    状态管理是一个单向的数据流,State 驱动 View 的渲染,而用户对 View 进行操作产生 Action,使 State 产生变化,从而使 View 重新渲染,形成一个单独的组件。

双向数据绑定  

开发者不需要不需要手动操作DOM,就可以获取或者改变表单的值

在网页中,form表单负责采集数据

js数据的变化会被自动渲染到页面上,页面上表单采集的数据发生变化的时候,会被vue自动获取到,并自动更新到js数据中

MVVM是vue实现两个特性的核心原理

mvvm的全称是model,view,viewModel,它把html页面分成了三个部分

model是表示当前页面渲染时所依赖的数据源

view表示当前页面所渲染的结构

viewModel是vue的示例,是mvvm的核心

mvvm的工作原理

vue被设计为可以一下向上逐层应用,它是一个mvvm数据双向绑定的库,专注ui层,其核心思想包括数据驱动视图,组件化思想

vue的版本

第一个vue示例

需要先准备vue,js脚本

<body>
    <!-- div#app指的是MMVM中的的V  view视图 -->
    <div id="app">{
  {msg}}</div>
</body>
<script src="[email protected]"></script>
<script>
    // new Vue指的是MVVM中的VM  VM把视图和数据联系起来
    const vm=new Vue({
        el:"#app",
        // data指的是MVVM中的M  model数据模型
        data:{
            msg:"hello world"
        }
    })
    console.log(vm)
</script>

el属性只能识别一个,所以绑定的标签必须是唯一的,id名是唯一的,我们一般选择id名

且不能是html、body。因为vue是实现模块化开发的,不能对别的模块产生影响

data是放置数据的地方,任何数据都可以,以键值对应的形式存放

devtools调试工具

百度搜索安装后,在插件详情中,启用“允许访问文件网址”

F12末尾可以看到vue,然后可以手动拖到前面

vue的指令与过滤器

vue为开发者提供的模板语法,用于辅助开发者渲染页面的基本结构

内容渲染指令

渲染DOM元素的文本内容,常用的有三个

1、v-text,会覆盖标签中原本的内容

2、{ { }},插值表达式,内部可以放置数据、三元表达式、函数等简单的js代码。需要注意的是使用插值表达式改变页面内容,会造成全页面的数据重新计算并渲染,导致效率低下

{
  {Math.random()}}
<p>{
  {bool?"bool为真":"bool为假"}}</p>
<p>{
  {num.toFixed(2)}}</p>

3、v-html,也会覆盖元素内原本的内容,但是可以解析html内容。会带来xss攻击,通过标签攻击网站

<body>
    <div class="app">
        <p v-text="name">姓名:</p>
        <p>性别:{
  { sex }}</p>
        <p v-html="tag"></p>
    </div>
</body>
<script>
    const vm=new Vue({
        el:".app",
        data:{
            name:"jack",
            sex:"女",
            tag:"<strong>加粗</strong>"
        }
    })
</script>

属性绑定指令

为元素动态绑定属性值,需要注意的是插值表达式不能绑定在属性值中

v-bind,在实际开发中可以简写为英文的冒号,“:”

使用v-bind的情况

第一种情况 属性值只有一个的情况

v-bind:属性="变量"。例如v-bind:class="one"

第二种情况:属性值有多个变量

v-bind:属性="[变量,变量]"。例如v-bind:class="[one,two]"

第三种情况:属性值不确定的情况

v-bind:属性="{k:v}"  k代表的是标签属性的值,是否存在由v的值决定 v是true就存在。否则不存在 v可以是表达式。

例如v-bind:class="{one:1==1,two:one=='one'}"

:class="{active:size>30}"

:class="[i ? 'active' : '']",用三元表达式,用{k:v}更简单,:class={active:i}

第四种情况:绑定样式

v-bind:style="{k:v}",k代表样式属性,v代表样式属性值。

例如:style="{fontSize:‘’24px’,color:‘red’}"

<body>
    <div class="app">
        <input type="text" v-bind:placeholder="tip">
        <img :src="img" alt="">
    </div>
</body>
<script>
    const vm=new Vue({
        el:".app",
        data:{
            tip:"请输入内容",
            img:"https://img-home.csdnimg.cn/images/20201124032511.png"
        }
    })
</script>

在插值表达式或者属性绑定中写js语句


<body>
    <div class="app">
        <p>{
  {num+1}}</p>
        <!-- 可以写js语句,可以用js方法 -->
        <p >{
  {c.split('').reverse().join('')}}</p>
        <!-- 前一个index是一个字符串,后一个index是属性,值为3 -->
        <p :index="'index'+index">1</p>
    </div>
</body>
<script>
    var vm=new Vue({
        el:".app",
        data:{
            num:10,
            c:"123456789",
            index:3

        }
    })
</script>

在使用v-bind属性绑定期间,需要对绑定内容进行动态拼接,则字符串外面应该包裹单引号

v-on的基本用法

v-on用来绑定事件,事件方法写在methods属性中。

事件方法可以简写,可以省略,:function

事件方法中,this就是vue实例化的对象

事件方法不能用箭头函数,箭头函数的this会指向window

事件方法可以传入参数

v-on:可以简写为@

$event参数代表事件对象

事件修饰符,重要的有两个,.prevent阻止事件默认行为,.stop阻止冒泡

vue的事件中,this==new Vue()对象,this.data.num==this.num

@click.prevent,@click.stop

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="[email protected]"></script>
</head>
<body>
    <div class="app">
        <p>{
  {count}}</p>
        <button v-on:click="add(1,$event)">+1</button>
        <button @click="sub">-1</button>
        <a href="http://www/baidu.com" @click.prevent>百度</a>
    </div>
</body>
<script>
    var vm=new Vue({
        el:".app",
        data:{
            count:0
        },
        methods:{
            // add:function(){
            //     this.count+=1;
            // }
            //可以简写
            add(n,e){
                this.count+=n;
                if(this.count%2==1){
                    e.target.style.backgroundColor="red";
                }else if(this.count%2==0){
                    e.target.style.backgroundColor="green";
                }              
            },
            sub(e){
                vm.count-=1;
                if(this.count%2==1){
                    e.target.style.backgroundColor="red";
                }else if(this.count%2==0){
                    e.target.style.backgroundColor="green";
                }     
                this===vm//true
            }
        }
    })
</script>
</html>

按键修饰符@keyup

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="[email protected]"></script>
</head>
<body>
    <div class="app">
        <input type="text" @keyup.esc="clear" @keyup.enter="submit">
    </div>    
</body>
<script>
    var vm=new Vue({
        el:".app",
        data:{},
        methods:{
            clear(e){
                e.target.value="";
            },
            submit(e){
                alert(e.target.value);
            }
        }
    })
</script>
</html>

双向数据绑定v-model

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="v

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值