【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

2023-11-04

目录

一.什么是Vue

1.前端技术的发展(html、CSS、JavaScript)

(1)JQuery:是对JavaScript进行了封装,使得操作DOM、事件处理、动画处理、Ajax交互变得非常简洁、方便。是JavaScript的库。

(2)Vue:通过虚拟的DOM来减少对真实DOM的操作,通过尽可能少的、简单的API实现数据的绑定。支持单向和双向的数据绑定

(3)Vue的基本概念:

2.MVVM架构:

(1)MVC架构:模型——视图——控制器

(2)MVVM架构:

二.Vue开发的方式

1.基本方式:在页面中引入vue.js文件。(vscode)

2.组件方式:利用Vue-cli(Vue脚手架)开发。(vscode、WebStorm、Vue Gui)

3.创建Vue实例:new Vue({})

(1)el:表示与vue实例绑定的唯一的根标签。是通过标签的id或class属性进行绑定

(2)data:初始化vue实例的属性的值。在底层会自动生成属性的setter和getter方法

(3)methods:用来定义方法。这些方法vue的实例可以直接访问

三.Vue的基本指令(重点)

1.插值表达式:{{ 变量名 }}。将Vue实例的对应的属性值在页面中显示出来

2.内置指令:vue的内置指令都是以 v- 开头的 特殊属性,通过这些指令来操作属性的值

(1)v-show:可以根据表达式的值的真假,来决定是否显示数据

(2)v-html:插入标签

(3)v-text:在元素中插入值。作用和插值表达式 {{ }}相同

(4)v-if、v-else、v-else-if:类似于if-else 的功能

(5)v-for:循环指令,用于遍历数组、集合、对象的属性

(6)v-bind:绑定元素的属性,并执行相关操作。简写方式为( :属性名 )

(7)v-on:监听事件,并执行相应的操作

(8)v-model:将input标签的值和变量进行绑定,实现数据和视图的双向绑定

(9)v-once:可以让元素或组件只渲染一次,一旦绑定,数据就不会改变。


一.什么是Vue

1.前端技术的发展(html、CSS、JavaScript)

(1)JQuery:是对JavaScript进行了封装,使得操作DOM、事件处理、动画处理、Ajax交互变得非常简洁、方便。是JavaScript的库。

(2)Vue:通过虚拟的DOM来减少对真实DOM的操作,通过尽可能少的、简单的API实现数据的绑定。支持单向和双向的数据绑定

(3)Vue的基本概念:

a.是一个渐进式框架:可以实现自底向上的逐层开发。

b.可以用Vue开发全新的项目,也可以在现有的项目中引入Vue

2.MVVM架构:

(1)MVC架构:模型——视图——控制器

M:Model(模型),对数据进行操作

V:View(视图),用来展示数据

C:Controller(控制器),处理用户的请求

(2)MVVM架构:

M:Model(模型)

V:View(视图)

VM:ViewModel(视图模型),实现数据的双向绑定

数据的双向绑定:Vue的特征之一,当视图发生改变时,模型能立即感知到;当模型中的数据发生改变时,视图也能立即反应出来。

二.Vue开发的方式

1.基本方式:在页面中引入vue.js文件。(vscode)

2.组件方式:利用Vue-cli(Vue脚手架)开发。(vscode、WebStorm、Vue Gui)

3.创建Vue实例:new Vue({})

(1)el:表示与vue实例绑定的唯一的根标签。是通过标签的id或class属性进行绑定

(2)data:初始化vue实例的属性的值。在底层会自动生成属性的setter和getter方法

可以是用 vue对象名.$data.属性名 的方式来获取值

(3)methods:用来定义方法。这些方法vue的实例可以直接访问

三.Vue的基本指令(重点)

1.插值表达式:{{ 变量名 }}。将Vue实例的对应的属性值在页面中显示出来

2.内置指令:vue的内置指令都是以 v- 开头的 特殊属性,通过这些指令来操作属性的值

(1)v-show:可以根据表达式的值的真假,来决定是否显示数据

(2)v-html:插入标签

 

(3)v-text:在元素中插入值。作用和插值表达式 {{ }}相同

(4)v-if、v-else、v-else-if:类似于if-else 的功能

强调:v-show和v-if的区别

A.实现方式:v-if底层采用appendChild方式实现,v-show是通过样式属性display来控制元素的显示和隐藏

B.加载性能:v-if的加载速度更快,v-show的加载速度慢

C.切换的开销:v-if开销大,v-show的开销小

v-if是条件渲染。将模型中的数据在视图中显示出来的过程称为渲染

(5)v-for:循环指令,用于遍历数组、集合、对象的属性

 

 

课堂练习:将上例中objArr的数据显示在table中

(6)v-bind:绑定元素的属性,并执行相关操作。简写方式为( :属性名 )

(7)v-on:监听事件,并执行相应的操作

强调:v-on的简写方式(@事件名)

(8)v-model:将input标签的值和变量进行绑定,实现数据和视图的双向绑定

<div id="app">
        <p>性别:</p>
        <input type="radio" name="sex" value="男" v-model="gender">男
        <input type="radio" name="sex" value="女" v-model="gender">女
        <p>你选择的性别是:{{ gender }}</p>
        <hr>
       <p>地理分类:</p>
       <select v-model="book">
         <optgroup label="华东地区">
            <option value="江苏">江苏</option>
            <option value="浙江">浙江</option>
            <option value="广东">广东</option>
         </optgroup>
         <optgroup label="西北地区">
            <option value="陕西">陕西</option>
            <option value="甘肃">甘肃</option>
            <option value="宁夏">宁夏</option>
         </optgroup>
       </select> 
       <p>你选择的地区是:{{ book }}</p>
       <hr>
       <p>兴趣爱好:</p>
       <input type="checkbox" name="chk" value="游戏" v-model="hobby">游戏
       <input type="checkbox" name="chk" value="篮球" v-model="hobby">篮球
       <input type="checkbox" name="chk" value="象棋" v-model="hobby">象棋
       <input type="checkbox" name="chk" value="游泳" v-model="hobby">游泳
        <p>你的爱好是:{{ hobby }}</p>
        <hr>
        <label>
            姓名:<input type="text" v-model="userName">
        </label>
        <br><br>
        <p>你的姓名是:{{ userName }}</p>
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                gender:'',
                book:'',
                hobby:[],
                userName: ''
            }
        })
    </script>

(9)v-once:可以让元素或组件只渲染一次,一旦绑定,数据就不会改变。

课堂练习1:实现如图所示的菜单效果

<style>
    body{
        width: 600px;
    }
    a{
        text-decoration: none; /* 去掉下划线 */
        display: block;
        color: #fff; /* 字体颜色 */
        width: 120px;
        height: 40px;
        line-height: 40px;
        border: 1px solid #fff;
        border-width: 1px 1px 0 0;
        background: #255f9e;
    }
    li{
        list-style-type: none;
    }
    #app > li{
        float: left;
        text-align: center;
        position: relative;
    }
    #app li a:hover{
        color: #fff;
        background: #ffb100;
    }
    #app li ul{
        position: absolute;
        left: -40px;
        top: 40px;
        margin-top: 1px;
        font-size: 12px;
    }
</style>
<body>
    <div id="app">
        <li v-for="menu in menus" @mouseover="menu.show = !menu.show" @mouseout="menu.show = !menu.show">
            <a :href="menu.url">{{ menu.name }}</a>
            <ul v-show="menu.show">
                <li v-for="sub in menu.subMenus">
                    <a :href="sub.url">{{ sub.name }}</a>
                </li>
            </ul>
        </li>
    </div>
    <script>
        const vm = new Vue({
            el:'#app',
            data: {
                menus: [
                    {
                        name:'我的淘宝', //主菜单的名称
                        url: '#', //主菜单对应的地址
                        show: false, //是否显示子菜单
                        subMenus: [ //子菜单的列表
                            {
                                name: '已买到的宝贝',
                                url: '#'
                            },
                            {
                                name: '已卖出的宝贝',
                                url: '#'
                            }
                        ]
                    },
                    {
                        name: '收藏夹',
                        url: '#',
                        show: false,
                        subMenus:[
                            {
                                name: '收藏的宝贝',
                                url: '#'
                            },
                            {
                                name: '收藏的店铺',
                                url: '#'
                            }
                        ]
                    }
                ]
            }
        })
    </script>

 课堂练习2:音乐播放器

<style>
    .active{
        background: red;
    }
</style>
<body>
    <div id="app">
        <audio :src="songs[currentIndex].songUrl" controls autoplay></audio>
        <ul>
            <li v-for="song in songs" @click="play(song.id)" :class="{active: song.id === currentIndex+1}">
                <h2>歌名:{{ song.name }}</h2>
                <p>歌手:{{ song.artist }}</p>
            </li>
        </ul>
    </div>
    <script>
        const vm = new Vue({
            el: '#app',
            data: {
                songs:[
                    {
                        id: 1,
                        name: '别知己', //音乐名
                        songUrl: './audio/别知己.mp3', //音乐地址
                        artist:'潇斌' //歌手
                    },
                    {
                        id: 2,
                        name: '西海情歌',
                        songUrl: './audio/西海情歌.mp3',
                        artist:'刀郎'
                    },
                    {
                        id:3,
                        name: '粉丝记事本',
                        songUrl: './audio/粉丝记事本.mp3',
                        artist: '徐誉滕'
                    }
                ],
                currentIndex: 0  //当前用户选择的音乐的下标
            },
            methods: {
                play(id){
                    this.currentIndex = id - 1
                }
            }
        })
    </script>
</body>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点) 的相关文章

  • Javascript 函数查找数字的倍数

    创建一个名为的函数multiplesOf 它将接受两个参数 第一个参数是数字数组 第二个参数是数字 该函数应返回一个新数组 该数组由参数数组中的每个数字组成 该数字是参数数字的倍数 So multiplesOf 5 6 7 8 9 10 3
  • 是否存在 IsCallable 为 false 但 IsConstructor 为 true 的 JS 对象?

    ECMAScript 规范函数可调用 https www ecma international org ecma 262 6 0 index html sec iscallable当且仅当其参数具有 Call 内部方法时返回 true 它在
  • Chrome 中的性能问题

    我目前正在从事一个相对较大的项目 使用 AngularJs 构建 应用程序的一部分是一个表单 您可以向其中添加任意数量的页面 不幸的是 添加了很多不必要的垃圾 即表示表单模型的对象可能会变得非常大 在某些时候 Chrome 基本上无法处理它
  • 如何将内联 JavaScript 与 Express/Node.js 中动态生成的内容分开?

    对于具有几年 Web 开发经验但没有找到答案的人来说 这是一个有点菜鸟的问题程序员堆栈交换 or Google 我决定在这里问一下 我在用Express网络框架Node js 但这个问题并不特定于任何 Web 框架或编程语言 以下是从数据库
  • 摩卡 - Chai Karma“套件未定义”

    我对 jscript tdd 很陌生 遇到了问题 希望有人能告诉我我在做什么 在浏览器中运行测试 通过 HTML 文件 一切正常 通过节点和业力运行它们我得到以下异常 我想在 node js 主机的 karma 中使用 Mocha 和 Ch
  • 引导程序提前输入未填充承诺的响应

    我的引导程序预输入如下
  • 隐藏 Div 的父级

    我只是想隐藏父divcomments section div class content content green div div div 我试过这个 document getElementById comments section pa
  • 设置 cookie 时中断 JavaScript 执行

    当设置 cookie 时 是否可以始终中断浏览器开发人员工具中的 javascript 执行 无需显式设置 JS 断点 document cookie 在 html head 块的开头添加此代码片段效果很好
  • Javascript split 不是一个函数

    嘿朋友们 我正在使用 javascript sdk 通过 jQuery facebook 多朋友选择器在用户朋友墙上发布信息 但是我收到此错误friendId split 不是函数 这是我的代码 function recommendToFr
  • 刷新页面时保存用户的选择

    我目前有一个页面显示不同团队的数据 我有一些数据 用户可以单击使其处于 打开 或 关闭 状态 并为每个数据显示不同的图标 它基本上就像一个清单 只是没有物理复选框 我想记住哪些 复选框 已被选中 即使在用户刷新页面或关闭浏览器并稍后返回之后
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • 将 UMD Javascript 模块导入浏览器

    你好 我正在对 RxJS 进行一些研究 我可以通过在浏览器中引用它来使用该库 如下所示 它使用全局对象命名空间变量 Rx 导入 我可以制作可观察的东西并做所有有趣的事情 当我将 src 更改为指向最新的 UMD 文件时 一切都会崩溃 如下所
  • Vuejs 2:去抖动不适用于手表选项

    当我在 VueJs 中反跳此函数时 如果我提供毫秒数作为原语 它就可以正常工作 但是 如果我将其提供为对 prop 的引用 它会忽略它 这是道具的缩写版本 props debounce type Number default 500 这是不
  • 在移动设备上滚动

    这个问题更多的是一个建议研究 我确实希望它对其他人有帮助 并且它不会关闭 因为我不太确定在哪里寻求有关此事的建议 在过去的 6 个月里 我一直在进行移动开发 我有机会处理各种设备上的各种情况和错误 最麻烦的是滚动问题 当涉及到在网站的多个区
  • 在 Javascript 中连接空数组

    我正在浏览一些代码 我想知道这有什么用处 grid push concat row 根据我的理解 它等同于 grid push row 为什么要大惊小怪 连接 你想使用 concat当您需要展平数组并且没有由其他数组组成的数组时 例如 va
  • 将 CKEditor 5 与 nuxtjs 结合使用

    我正在尝试在我的 Nuxtjs 项目中导入 CKEditor 5 的自定义版本 并且我已经尝试了所有可能的方法来正确导入它 但没有一个对我有用 这是其中之一 let ClassicEditor let CKEditor if process
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • 分页在服务器端好还是前端好? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我正在构建 Laravel Vue 应用程序 我想知道在后端使用分页还是在前端使用分页更好 我认为最好在每页发送尽可能少的数据的请求 但我想听听
  • 如何确定所有角度2分量都已渲染?

    当所有 Angular2 组件完成渲染时 是否会触发一个角度事件 For jQuery 我们可以用 function 然而 对于 Angular2 当domready事件被触发 html 只包含角度组件标签 每个组件完成渲染后 domrea
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev

随机推荐