vue复习(二)

一、组件介绍

  • 每一个组件都是一个vue实例
  • 每个组件均具有自身的模板template,根组件的模板就是挂载点
  • 每个组件模板只能拥有一个根标签
  • 子组件的数据具有作用域,以达到组件的复用

二、局部组件

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>局部组件</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- 错的 -->
        <!-- <localTag></localTag> -->

        <!-- ① -->
        <!-- <localtag></localtag> -->

        <!-- ② ③ ④ ⑤ -->
        <local-tag></local-tag>
        <local-tag></local-tag>

        <!-- 总结:组件与html公用的名称(组件名、方法名、变量名),不要出现大写,提倡使用-语法 -->
    </div>
</body>
<script type="text/javascript">
    // 创建局部组件:就是一个拥有模板(满足vue写法)的对象
    var localTag = {
        // 模板
        // 错误: 只能解析第一个标签,以它作为根标签
        // template: ‘<div>局部组件1</div><div>局部组件2</div>‘
        template: ‘        <div>            <div>局部组件1</div>            <div>局部组件2</div>        </div>‘
    }
    // 局部组件需要被使用它的父组件注册才能在父组件中使用

    // 模板: html代码块
    // 根组件,拥有模板,可以显式的方式来书写template,一般不提倡,模板就是挂载点及内部所有内容
    // 注:挂载点内部一般不书写任何内容
    new Vue({
        el: ‘#app‘, // old
        // template: ‘<div></div>‘ // new
        // 用components进行组件的注册

        // ①
        // components: {
        //     ‘localtag‘: localTag
        // }

        // ②
        // components: {
        //     ‘local-tag‘: localTag
        // }

        // ③
        // components: {
        //     ‘localTag‘: localTag
        // }

        // ④
        components: {
             ‘LocalTag‘: localTag
        }

        // ⑤
        // ES6 key与value一直,可以单独写key
        // components: {
        //     localTag
        // }
    })
</script>
</html>

三、全局组件

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>全局组件</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <global-tag></global-tag>
        <global-tag></global-tag>
    </div>
</body>
<script type="text/javascript">
    // 创建全局组件: 组件名, {template:‘‘}
    Vue.component(‘global-tag‘, {
        // data: function () {
        //     return {
        //         num: 0
        //     }
        // },
        data () {
            return {
                num: 0
            }
        },
        template: ‘<button @click="btnClick">点击了{{num}}下</button>‘,
        methods: {
            btnClick () {
                console.log("你丫点我了!!!");
                this.num ++
            }
        }
    })

    new Vue({
        el: ‘#app‘,
        data: {

        }
    })
</script>
</html>

四、父组件传递数据给子组件

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>父传子</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- 通过属性绑定的方式 -->
        <!-- <global-tag v-bind:abc=‘sup_d1‘ :supD2=‘sup_d2‘></global-tag> -->
        <global-tag v-bind:abc=‘sup_d1‘ :sup_d2=‘sup_d2‘></global-tag>
        <!-- 模板名用-连接命名,属性名用_连接命名 -->
    </div>
</body>
<script type="text/javascript">
    // 子组件需要接受数据
    Vue.component(‘global-tag‘, {
        // 通过props来接收绑定数据的属性
        // props: [‘abc‘, ‘supd2‘],
        props: [‘abc‘, ‘sup_d2‘],
        // template: ‘<div><p @click="fn">{{ abc }}</p></div>‘,
        template: ‘<div><p @click="fn(abc)">{{ abc }}</p></div>‘,
        methods: {
            // fn () {
            //     alert(this.abc)
            // }
            fn (obj) {
                console.log(obj, this.sup_d2)
            }
        }
    })

    // 数据是父组件的
    new Vue({
        el: ‘#app‘,
        data: {
            sup_d1: "普通字符串",
            sup_d2: [1, 2, 3, 4, 5]
        }
    })
</script>
</html>

五、子组件传递数据给父组件

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <title>子传父</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- 通过发送事件请求的方式进行数据传递(数据作为请求事件的参数) -->
        <global-tag @send_data=‘receiveData‘></global-tag>
        <p>{{ msg }}</p>
    </div>
</body>
<script type="text/javascript">
    Vue.component(‘global-tag‘, {
        data () {
            return {
                sub_v1: ‘普通字符串‘,
                sub_v2: [1, 2, 3, 4, 5]
            }
        },
        template: ‘<button @click="btnClick">发送</button>‘,
        methods: {
            btnClick () {
                console.log("子>>> ", this.sub_v1, this.sub_v2);
                // 通过emit方法将数据已指定的事件发生出去
                // 事件名, 参数...
                this.$emit("send_data", this.sub_v1, this.sub_v2)
            }
        }
    })

    // 数据是父组件的
    new Vue({
        el: ‘#app‘,
        data: {
            msg: ‘‘
        },
        methods: {
            receiveData(obj1, obj2) {
                console.log("父>>> ", obj1, obj2)
                this.msg = obj2;
            }
        }
    })
</script>
</html>

六、父组件实现todoList

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>组件todoList</title>
    <script type="text/javascript" src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <div>
            <input type="text" v-model=‘in_val‘>
            <button @click=‘pushAction‘>提交</button>
        </div>
        <!-- <ul>
            <li @click=‘deleteAction(index)‘ v-for=‘(item,index) in list‘ :key="index">{{ item }}</li>
        </ul> -->

        <!-- 父 将list传输给 子 -->
        <todo-list :list_data=‘list‘ @delete_action=‘deleteAction‘></todo-list>

    </div>
</body>
<script type="text/javascript">
    Vue.component(‘todo-list‘, {
        props: [‘list_data‘],
        template: ‘<ul><li v-for="(e, i) in list_data" :key="i" @click="li_action(i)">{{e}}</li></ul>‘,
        methods: {
            li_action (index) {
                // 子 反馈index给 父
                this.$emit(‘delete_action‘, index);
            }
        }
    })

    new Vue({
        el: ‘#app‘,
        data: {
            in_val: ‘‘,
            list: []
        },
        methods: {
            pushAction () {
                this.list.push(this.in_val);
                this.in_val = ‘‘
            },
            deleteAction (index) {
                this.list.splice(index, 1);
            }
        }
    })
</script>
</html>

七、搭建Vue开发环境

1、安装nodeJS

2、安装脚手架

  • vue官网 => 学习 => 教程 => 安装 => 命令行工具(CLI)
安装全局vue:npm install -g @vue/cli
?
在指定目录创建vue项目:vue create my-project
?
进入项目目录启动项目:npm run serve
?
通过指定服务器路径访问项目页面:http://localhost:8080/

3、项目创建

babel:是一个 JavaScript 编译器。eslint:是一个语法规则和代码风格的检查工具,可以用来保证写出语法正确、风格统一的代码。

4、vue基础模板

<template>

</template>
<script>
    export default {

    }
</script>
<style scoped>
</style>
npm install -g vue-cli
?
vue init webpack my-project
?
npm install -g cnpm --registry=https://registry.npm.taobao.org

原文地址:https://www.cnblogs.com/sui776265233/p/9768809.html

时间: 2024-08-29 06:24:52

vue复习(二)的相关文章

Hibernate复习(二)主要对象

1.SessionFactory 一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例. SessionFactory有以下特点: –它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享. –它是重量级的,这意味着不能随意创建或销毁它的实例.如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实 例.如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFac

高二上学期期末―一轮复习二次(11.9-1.15)

目标:班级第一 继期中考试的一轮一次后,一轮复习二次需要完成的有:(不包括真题试卷) 数学 一年好题刷完一本 圆锥曲线刷完 自招秘籍刷完 浙大一试刷某些薄弱专题 物理 高考必刷题刷完 化学 考点124 53刷完 一年好题刷完 生物 考点13 一年好题刷完 高考必刷题刷完 原文地址:https://www.cnblogs.com/fangshun2002/p/9787909.html

JS组件系列——又一款MVVM组件:Vue(二:构建自己的Vue组件)

阅读目录 一.为什么组件很重要 二.Vue里面的组件基础知识 1.组件的概念 2.组件原理 3.组件使用 三.封装自己的Component 1.使用Component封装bootstrapTable 2.封装select 3.查看其他Vue框架源码 四.总结 正文 前言:转眼距离上篇 JS组件系列--又一款MVVM组件:Vue(一:30分钟搞定前端增删改查) 已有好几个月了,今天打算将它捡起来,发现好久不用,Vue相关技术点都生疏不少.经过这几个月的时间,Vue的发展也是异常迅猛,不过这好像和博

Vue(二十三)vuex + axios + 缓存 运用 (以登陆功能为例)

(一)axios 封装 (1)axios拦截器 可以在axios中加入加载的代码... (2)封装请求 后期每个请求接口都可以写在这个里面... (二)vuex user.js import { login } from '@/api/login' const state = { userInfo: null, } const getters = { get_userInfo (state) { let userInfo = state.userInfo if (!userInfo) { use

vue复习(一)

一.认识Vue 定义:一个构建数据驱动的Web界面的渐进式框架 优点: 1.可以完全通过客户端浏览器渲染页面,服务器端只提供数据 2.方面构建单页面应用程序(SPA) 二.引入Vue <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>vue导入</title> </head> <body&

vue基础二,组件

vue二: 指令: 1,v-once指令: v-once:单独使用,限制的标签内容一旦赋值,便不可被动更改(如果是输入框,可以主动修改) <div id="app"> <input type="text" v-model="msg"> <!-- 一旦赋值,只可主动更改 --> <input type="text" v-model="msg" v-once> &

vue 笔记二

vue制作weibo 交互 vue-> 1.0 vue-resource ajax php 服务器环境(node) this.$http.get()/post()/jsonp() this.$http({ url:地址 data:给后台提交数据, method:'get'/post/jsonp jsonp:'cb' //cbName });----------------------------------vue事件: @click=""数据: 添加一条留言: 获取某一页数据:

Linux 复习二

第二章 一.Linux文件系统 1.基本概念 Linux文件系统为单根的树状结构,根为“/”,文件名大小写敏感,除了“/”都是可用字符,文件名以“.”开始的为隐藏文件. 2.常用文件夹 bin:可执行二进制文件(命令). boot:引导目录,引导所需要的文件. dev:硬件设备 etc:配置文件 home:家目录,每个普通用户在home下都有一个和用户名相同的文件夹,root用户除外. lib:Linux运行的库文件. lost+found:文件系统文件. media和mnt:挂载设备目录. o

vue笔记二

七.列表渲染 1.示例 <ul id="example-2"> <li v-for="(item, index) in items"> {{ parentMessage }} - {{ index }} - {{ item.message }} </li> </ul> var example2 = new Vue({ el: '#example-2', data: { parentMessage: 'Parent',