前端学习:Vue.js基本使用

简介: 前端学习:Vue.js基本使用

Vue教程文档:

https://cn.vuejs.org/v2/guide/


定义

实例: new Vue()

挂载点: el

数据:data

模板: template

方法:methods

计算属性: computed类似 variable = variable()

侦听器: watch 一旦数据变化都会触发

参数:props

组件:components

组件与实例的关系:每一个组件都是一个Vue实例

父组件与子组件交互:


父组件通过 属性 传递给子组件参数

子组件通过 发布事件$emit 传递给父组件参数,前提是父组件需要先 注册事件

使用

变量使用:使用插值表达式 {{ variable }}

文本替换:v-text="variable"

内容替换:v-html="content"

事件绑定:v-on:click="function" 等价于@click="function"

属性绑定: v-bind:title="variable" 等价于 :title="variable"

双向数据绑定: v-model="variable"

show语句:v-show="bool" 为真时显示

if语句:v-if="bool" 为真时加入dom

for语句:<li v-for="(item, index) of list" :key="index">{{item}}</li>


实例

第一个Vue实例 插值表达式

 

<div id="hello">{{ hello }}</div>  
    <script>
        //Vue实例
        new Vue({
            el: "#hello",
            data: {
                hello: "hello world"
            }
        })
    </script>
hello world

挂载点, 实例, 模板


<div id="root">
    <!-- 挂载点 -->
    </div>
    <script>
        // 实例
        new Vue({
            el: "#root",
            // 模板, 如果实例中没有定义模板,则默认使用挂载点里边的dom元素为模板
            template: "<h1>hello template {{ msg }}</h1>",
            data: {
                msg: "this is message",
            }
        })
    </script>
hello template this is message

文本替换


<div id="text" v-text="number"></div>
    <script>
        new Vue({
            el: "#text",
            data: {
                number: 123456,
            }
        })
    </script>
123456

内容替换 事件绑定


方法 v-on:等价于@

<div id="html" v-on:click="handleClick" @dblclick="handleDoubleClick" v-html="content"></div>
    <script>
        new Vue({
            el: "#html",
            data:{
                content: "<h1>this is content</h1>"
            },
            methods: {
                handleClick: function(){
                    this.content = "<h1> click</h1>"
                },
                handleDoubleClick: function(){
                    this.content = "<h1>double click</h1>"
                }
            }
        })
    </script>
this is content

属性绑定

使用v-bind之后,相单于一个js表达式 等价于:title


 

<div id="bind" v-bind:title="'hello ' + title">this is title</div>
    <script>
        new Vue({
            el:"#bind",
            data: {
                title: "this is a title"
            }
        })
    </script>
this is title

双向数据绑定


<div id="db-bind">
        <input type="text" v-model="content">
        <div>{{ content }}</div>
    </div>
    <script>
        new Vue({
            el:"#db-bind",
            data: {
                content: "this is data double bind"
            }
        })
    </script>
this is data doubldasdase bind
this is data doubldasdase bind

计算属性


<div id="computed">
        <input type="text" v-model="firstName">
        <input type="text" v-model="lastName">
        <div>{{ fullName }}</div>
        <div>{{ count }}</div>
    </div>
    <script>
        new Vue({
            el:"#computed",
            data: {
                firstName: "",
                lastName: "",
                count: 0
            },
            // 计算属性
            computed: {
                fullName: function(){
                    return this.firstName + " " + this.lastName
                }
            },
            // 侦听器, 一旦数据变化都会触发
            watch: {
                fullName: function(){
                    this.count ++
                }
            }
        })
    </script>

v-if v-show v-for


<div id="vif">
        <div v-if="show">v-if从dom中移除(适合一次操作)</div>
        <div v-show="show">v-show从dom中隐藏(适合多次操作)</div>
    <button @click="handleClick">toggle</button>
    <ul>
        <li v-for="item of list">{{item}}</li>
        <!-- 以下方法增加key,可以提升性能 -->
        <li v-for="(item, index) of list" :key="index">{{item}}</li>
    </ul>
</div>
    <script>
        new Vue({
            el: "#vif",
            data: {
                show: true,
                list: ["first", "second", "third", "fourth"]
            },
            methods: {
                handleClick: function(){
                    this.show = !this.show
                }
            }
        })
    </script>
v-if从dom中移除(适合一次操作)
v-show从dom中隐藏(适合多次操作)
toggle
first
second
third
fourth
first
second
third
fourth

TodoList实例


<div id="todolist">
        <input type="text" v-model="inputValue">
        <button @click="handleSubmit">确定</button>
        <!-- 普通方式添加 -->
        <ul>
           <global></global>
            <li v-for="(item, index) of list" :key="index">{{ item }}</li>
            <local></local>
        </ul>
        <!-- 通过全局组件 -->
        <ul>
           <todo-item 
                v-for="(item, index) of list" 
                :key="index" 
                :content="item" 
                :index="index"
                @delete="handleDelete"   
                ><!-- 通过全局组件 -->
           </todo-item> 
        </ul>
    </div>
    <script>
        // 全局组件
        Vue.component("global", {
            template: "<li>item-global</li>"
        })
        // 组件与实例的关系:每一个组件都是一个Vue实例,
        Vue.component("todo-item", {
            props: ["content", "index"], //接收参数,通过属性传递值
            template: '<li @click="handleClick">{{content}} {{index}}</li>',  //显示
            methods: {
                handleClick: function(){
                    this.$emit("delete", this.index)  //子组件通过发布和父组件通讯
                }
            }
        })
        // 父组件与子组件通讯,交互
        // 父组件通过 属性 传递给子组件参数
        // 子组件通过 发布事件 传递给父组件参数,前提是父组件需要先 注册事件
        // 局部组件
        var Local = {
            template: "<li>item-local</li>"
        }
        new Vue({
            el:"#todolist",
            // 注册局部组件
            components: {
                "local": Local
            },
            data:{
                inputValue: "",
                list: []
            },
            methods: {
                handleSubmit: function(){
                    this.list.push(this.inputValue);
                    this.inputValue = "";
                },
                handleDelete: function(index){
                    this.list.splice(index, 1)
                }
            }
        })
    </script>
 确定
item-global
sf
fsdfsdf
item-local
sf 0
fsdfsdf 1

相关文章
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
191 1
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
146 1
|
7月前
|
JavaScript 前端开发 Java
制造业ERP源码,工厂ERP管理系统,前端框架:Vue,后端框架:SpringBoot
这是一套基于SpringBoot+Vue技术栈开发的ERP企业管理系统,采用Java语言与vscode工具。系统涵盖采购/销售、出入库、生产、品质管理等功能,整合客户与供应商数据,支持在线协同和业务全流程管控。同时提供主数据管理、权限控制、工作流审批、报表自定义及打印、在线报表开发和自定义表单功能,助力企业实现高效自动化管理,并通过UniAPP实现移动端支持,满足多场景应用需求。
648 1
|
8月前
|
移动开发 前端开发 JavaScript
Vue与React两大前端框架的主要差异点
以上就是Vue和React的主要差异点,希望对你有所帮助。在选择使用哪一个框架时,需要根据项目的具体需求和团队的技术栈来决定。
478 83
|
7月前
|
JavaScript 前端开发 编译器
Vue与TypeScript:如何实现更强大的前端开发
Vue.js 以其简洁的语法和灵活的架构在前端开发中广受欢迎,而 TypeScript 作为一种静态类型语言,为 JavaScript 提供了强大的类型系统和编译时检查。将 Vue.js 与 TypeScript 结合使用,不仅可以提升代码的可维护性和可扩展性,还能减少运行时错误,提高开发效率。本文将介绍如何在 Vue.js 项目中使用 TypeScript,并通过一些代码示例展示其强大功能。
289 22
|
8月前
|
前端开发 JavaScript 数据可视化
58K star!这个让网页动起来的JS库,前端工程师直呼真香!
Anime.js 是一款轻量级但功能强大的JavaScript动画引擎,它能够以最简单的方式为网页元素添加令人惊艳的动效。这个项目在GitHub上已经获得58,000+星标,被广泛应用于电商页面、数据可视化、游戏开发等场景。
293 8
|
8月前
|
JavaScript 前端开发 容器
|
8月前
|
JavaScript 前端开发
|
8月前
|
存储 JavaScript 前端开发
|
8月前
|
移动开发 JavaScript 前端开发

热门文章

最新文章

  • 1
    前端如何存储数据:Cookie、LocalStorage 与 SessionStorage 全面解析
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
  • 4
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改