学习VUE-day2

一.组件

组件 (Component) 是 Vue最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码

  • 一句话总结组件: 组件就是自定义标签,它内部存储了很多html代码

1.1 组件的注意事项

  • 先创建组件再进行挂载
  • 组件的template有且只有一个外部标签
  • 组件取名如果是驼峰命名,使用-表示 例: <myComponent> <my-component>建议使用小写命名

1.2 全局组件(所有被挂载的地方都可以使用)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <mycomponent></mycomponent>
</div>
<div id="app2">
    <mycomponent></mycomponent>
</div>
</body>
<script type="text/javascript">
    /*
    * 全局组件(所有被挂载的位置都可以使用)
    * 组件注意事项:
    *   1.有且只有一个外部标签
    *   2.取名如果使用驼峰命名 -> 标签名称就要变成 my-tag {建议使用小写}
    *   3.组件必需在挂载之前先声明
    * */
    Vue.component("mycomponent",{
        template:"<div><h1>全局组件</h1><h2 style='color: red'>都是全局组件</h2></div>"
    })

    new Vue({
        el:"#app"
    })

    new Vue({
        el:"#app2"
    })
</script>
</html>

1.3 局部组件(只有当前挂载的元素可以使用)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
</head>
<body>
<div id="app">
    <mycomponent></mycomponent>
</div>
<div id="app2">
    <mycomponent></mycomponent>
</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        //这是一个局部组件
        components:{
            //组件名
            mycomponent:{
                //相应的模板
                template: "<div><h1>局部组件</h1></div>"
            }
        }
    })
    new Vue({
        el:"#app2"
    })
</script>
</html>

在这里插入图片描述

1.4 组件模板

1.4.1 两种创建模板的方式

  • 直接使用template标签

特别注意:在模板中获取数据必需是一个函数返回

<body>
<div id="app">
    <!--如果template标签放到这里面,它默认就会使直接使用起来 -->
    <mytag></mytag>
</div>

<!--直接添加一个组件标签  template里面的内容是不会显示出来的-->
<template id="mytemp">
    <form method="post" action="">
        用户:<input type="text" name="username"> <br />
        密码:<input type="password" name="password"><br />
        <button type="button" @click="say">{{msg}}</button>
    </form>
</template>
</body>
<script type="text/javascript">
    Vue.component("mytag",{
        //这里直接引入tempate标签中的内容
        template:"#mytemp",
        //这里的数据需要写一个函数,进行返回
        data(){
            return {
                msg:"...登陆..."
            }
        },
        //这里定义模板的方法
        methods:{
            say(){
                alert("登陆成功");
            }
        }
    })

    new Vue({
        //挂载
        el:"#app",
        //数据
        data:{
            msg:"hello"
        }
    })
</script>
  • 使用script标签

注意:必需加一个 type="text/template"

<body>
<div id="app">
    <mytag></mytag>
</div>

<!--直接添加一个组件标签  template里面的内容是不会显示出来的-->
<script id="myjstemp" type="text/template">
    <form method="post" action="">
        用户:<input type="text" name="username"> <br />
        密码:<input type="password" name="password"><br />
        <input type="button" value="登录" />
    </form>
</script>
</body>
<script type="text/javascript">
    Vue.component("mytag",{
        //这里直接引入script标签中的内容
        template:"#myjstemp"
    })

    new Vue({
        //挂载
        el:"#app",
        //数据
        data:{
            msg:"hello"
        }
    })
</script>

1.4.2 获取动态元素

组件要获取动态元素,它不是找的vue中的data属性,
而是找template中的data属性
模板中data对应的值,必须是一个函数
并且在函数内部返回的值必须是json对象

<body>
<div id="app">
    <mycomponent></mycomponent>
</div>
<!--
    注意:如果组件要获取动态元素,它不是找的vue中的data属性,而是找template中的data属性
    模板中data对应的值,必须是一个函数   并且在函数内部返回的值必须是json对象
-->
<template id="mytemplate">
    <h1>欢迎{{username}}登录系统&emsp;年龄:{{age}}</h1>
</template>
</body>
<script type="text/javascript">
    //创建全局组件使用一个变量接受
    Vue.component("mycomponent", {
        template: "#mytemplate",
        data:function(){
            return {
                username:"管理员",
                age:18
            }
        }
    });
    //它不会找的vue中的data属性
    new Vue({
        el:"#app",
        data:{
            username:"admin"
        }
    })
</script>

三.Vue路由

路由是Vuejs中一个重要的插件
如果要使用路由功能需要引入路由的js代码
路由主要是为了构建单页面而存在的
现在有些网站就是使用路由方式完成的(比如:网易云音乐)

路由代码的步骤

  1. 引入js(vue的js与路由的js)
<!--vue js-->
<script type="text/javascript" src="node_modules/vue/dist/vue.min.js"></script>
<!--路由 js-->
<script type="text/javascript" src="node_modules/vue-router/dist/vue-router.min.js"></script>
  1. 准备路由的导航组件 router-link
  2. 准备路由出口(最后数据展示的位置) router-view
  3. 定义路由对与对应的组件
  4. 进行路径的挂载
<body>
<div id="app">
    <p>
        <!-- 使用 router-link 组件来导航. -->
        <!-- 通过传入 `to` 属性指定链接. 意思是你要跳转到什么地方 -->
        <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
        <router-link to="/index">首页</router-link>
        <router-link to="/employee">员工</router-link>
        <router-link to="/department">员工</router-link>
    </p>
    <!-- 路由出口 -->
    <!-- 路由匹配到的组件将渲染在这里 -->
    <router-view></router-view>

</div>
</body>
<script type="text/javascript">
    // 1. 定义 (路由) 组件。
    // 可以从其他文件 import 进来
    let INDEX = Vue.component("index", {
        template: "<h1>首页</h1>"
    });
    let EMPLOYEE =Vue.component("employee", {
        template: "<h1>员工</h1>"
    });
    let DEPARTMENT = Vue.component("department", {
        template: "<h1>部门</h1>"
    });
    // 2. 定义路由
    //path:这个路由的路径,这个路径和<router-link> to属性中的路径对应上
    let router = new VueRouter({
        routes:[
            /*路径映射到组件*/
            {path:"/index",component:INDEX},
            {path:"/employee",component:EMPLOYEE},
            {path:"/department",component:DEPARTMENT}
        ]
    })

    var app = new Vue({
        el:"#app",
        //告诉vue我要使用路由
        router  //router:router
    })
</script>

四.生命周期钩子

每个 Vue 实例在被创建时都要经过一系列的初始化过程 :创建实例,装载模板,渲染模板等等。
Vue为生命周期中的每个状态都设置了钩子函数(监听函数)。每当Vue实例处于不同的生命周期时,对应的函数就会被触发调用。

<body>
<div id="app">

</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data:{
            msg:"你好"
        },
        methods:{
            sayHello(){
                alert("你好呀!")
            }
        },
        //方法和数据已经初始化完毕,在created中可以调用data和methods中的内容
        created(){
            alert("created"+this.msg)
            this.msg = "被修改了"
        },
        //挂载完毕
        mounted(){
            //整个vue初始化完毕
            // 加载列表  渲染
            // ajax请求发送到后台
            alert("mounted"+this.msg)
        }

    })
</script>

五.计算属性和watch

5.1 计算属性

在插值表达式中使用js表达式是非常方便的,而且也经常被用到。
但是如果表达式的内容很长,就会显得不够优雅,而且后期维护起来也不方便

  • 例如下面的场景,我们有一个日期的数据,但是是毫秒值:
data:{
	birthday:1529032123201 // 毫秒值
}
  • 方案1:我们在页面渲染,希望得到yyyy-MM-dd的样式:
  • 虽然能得到结果,但是非常麻烦
<div id="app">
    <h1>您的生日是:{{
           new Date(birthday).getFullYear() + '-'+ new Date(birthday).getMonth()+ '-' + new Date(birthday).getDay()
           }}
    </h1>
</div>
  • 方案2:Vue中提供了计算属性,来替代复杂的表达式:
<body>
<div id="app">
    <!--计算属性-->
    <h1 style="color: red">您的生日是:{{birth}} </h1>
</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data:{
            birthday:1529032123201 // 毫秒值
        },
        computed:{
            birth(){// 计算属性本质是一个方法,但是必须返回结果
                const d = new Date(this.birthday);
                return d.getFullYear() + "-" + d.getMonth() + "-" + d.getDay();
            }
        }
    })
</script>

5.2 watch

watch可以让我们监控一个值的变化从而做出相应的反应

<body>
<div id="app">
    <input type="text" v-model="msg">
</div>
</body>
<script type="text/javascript">
    new Vue({
        el:"#app",
        data: {
            msg:""
        },
        watch:{
            msg(newVal, oldVal){
                console.log(newVal, oldVal);
            }
        }
    })
</script>

六.Webpack打包

Webpack 是一个前端资源加载/打包工具。它将根据模块的依赖关系进行静态分 析,然后将这些模块按照指定的规则生成对应的静态资源。

  • 将碎小文件打包成一个整体,减少单页面内的请求次数,提高网站效率。
  • 将ES6的高级语法进行转换编译,以兼容老版本的浏览器。
  • 将代码打包的同时进行混淆,提高代码的安全性。

6.1 使用

6.1.1 安装

  • 本地安装:
    npm install webpack --save-dev
    npm install webpack-cli --save-dev

  • 全局安装:–推荐使用
    npm install -g webpack (服务)
    npm install -g webpack-cli(客户端)

6.1.2 简单使用

  • Js打包-入门

a.js

var a = "a模块";
var b = require('./b.js');
console.log(b);

b.js

define(function () {
    var b = "b模块";
    return b;
});

—amd 模式可以 但是commonjs必须在nodejs环境,浏览器环境不ok
打包:webpack src/a.js -o dist/bundle.js

Index.html

<script src="dist/bundle.js"></script>
  • Js打包-配置文件

上面我们每次在打包的时候,都要输入 webpack src/a.js -o dist/bundle.js
这个命令,比较麻烦,所以我们可以按照下面的方式,新建一个js文件,到时候打包的时候,只需要运行webpack 命令就可以进行打包

webpack.config.js ,该文件与项目根处于同级目录

var path = require("path");
module.exports = {
	entry: './src/main.js',
	output: {
		path: path.resolve(__dirname, './dist'),
		filename: 'bundle.js'
	}
}

6.2 Css加载

6.2.1 加载器

webpack 可以使用 loader 来预处理文件。这允许你打包除 JavaScript 之外的任何静态资源。你可以使用 Node.js来很简单地编写自己的 loader。

loader 通过在 require() 语句中使用 loadername! 前缀来激活,或者通过 webpack 配置中的正则表达式来自动应用

  • vue-loader 转换vue组件 *.vue
  • css-loader 加载css文件
  • babel-loader 加载 ES2015+ 代码,然后使用 Babel 转译为 ES5

6.2.2 实现

在这里插入图片描述

  • 步骤一:
    npm install style-loader --save-dev
    npm install css-loader --save-dev
  • 步骤二:
    a.js引入:
var a = "a模块";
var b = require('./b.js');

console.log(b);

require('../css/index.css')
  • 步骤三:在webpack.config.js文件引入下面代码
var path = require("path");
module.exports = {
    entry: './web/js/a.js',
    output: {
        path: path.resolve(__dirname, './dist'),
        filename: 'bundle.js'
    },
    module: {
        rules: [
            {
                test: /\.css$/,     //匹配文件规则
                use: ['style-loader', 'css-loader']    //匹配后使用什么加载器进行模块加载
                // webpack use的配置,是从右到左进行加载的
            },
        ]
    }
}
  • 步骤四:打包:webpack

6.3 热更新web服务器

刚才的案例中,我们都是本地运行。webpack给我们提供了一个插件,可以帮我们运行一个web服务

  • 安装插件:npm install webpack-dev-server --save-dev
  • 添加启动脚本 :
    在package.json中配置script
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config ./webpack.conf.js",      },
--inline:自动刷新
--hot:热加载
--port:指定端口
--open:自动在默认浏览器打开
--host:可以指定服务器的 ip,不指定则为127.0.0.1

npm run dev/test
出现错误之后

https://www.cnblogs.com/gqx-html/p/10756388.html
https://www.cnblogs.com/laraLee/p/9174383.html

"devDependencies": {
  "css-loader": "^3.1.0",
  "style-loader": "^0.23.1",
  "webpack": "^3.10.0",
  "webpack-dev-server": "^2.9.7"
},

在执行 npm install

七.Vue-cli 脚手架

在开发中,需要打包的东西不止是js、css、html。还有更多的东西要处理,这些插件和加载器如果我们一一去添加就会比较麻烦。
幸好,vue官方提供了一个快速搭建vue项目的脚手架vue-cli
使用它能快速的构建一个web工程模板
官网:https://github.com/vuejs/vue-cli
安装命令:npm install -g vue-cli

7.1 Vue-cli 快速上手

  • 新建一个项目
    在这里插入图片描述
  • 安装vue-cli
    在这里插入图片描述
  • vue-cli快速创建webpack项目
    在这里插入图片描述
  • 运行
    npm run dev
    npm run build打包可以在服务器运行在这里插入图片描述运行后 直接访问http://localhost:8080
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值