zoukankan      html  css  js  c++  java
  • 单文件组件

    一、单文件组件

      1、什么是vue文件

        .vue文件,称为单文件组件,是Vue.js自定义的一种文件格式,一个.vue文件就是一个单独的组件,在文件内封装了组件相关的代码:html、css、js

      2、.vue文件的组成部分

        1、.vue文件由三部分组成:<template>、<style>、<script>
                  <template>
                      html//写响应的html代码
                  </template>

                  <style>
                      css//写响应的css代码
                  </style>

                  <script>
                      js//写响应的js代码
                  </script>

      3、vue-loader 

        1、浏览器本身并不认为.vue文件,所以必须对.vue文件进行加载解析,此时需要vue-loader

        2、类似的loader还有许多,如:html-loader、css-loader、style-loader、babel-loader等

        3、需要注意的是vue-loader是基于webpack的 ,所以要想用  vue-loader必须先安装webpack。

      4、 webpack

        1、webpack是一个前端资源模板化加载器和打包工具,它能够把各种资源都作为模块来使用和处理

        2、实际上,webpack是通过不同的loader将这些资源加载后打包,然后输出打包后文件

        3、简单来说,webpack就是一个模块加载器,所有资源都可以作为模块来加载,最后打包输出

        4、 [官网](http://webpack.github.io/)      webpack版本:v1.x v2.x

        5、 webpack有一个核心配置文件:webpack.config.js,必须放在项目根目录下

      5、示例,步骤:

        1、创建项目,目录结构 如下:
          webpack-demo    项目文件名称
              |-index.html    网页主文件
              |-main.js   入口文件       
              |-App.vue   vue文件
              |-package.json  工程文件,不需要手动建立 ,直接在项目目录下npm init --yes 初始化就可以了
              |-webpack.config.js  webpack配置文件
              |-.babelrc   Babel配置文件

        2、 编写App.vue(vue文件之间可以相互导入,就相当于父组件,子组件)

    <template>
        <div class="user">
            <h2>用户列表</h2>
            <ul>
                <li v-for="value in users">{{value}}</li>
            </ul>
        </div>
    </template>
    
    <script>
        export default {
            data(){
                return {
                    users:['tom','jack','mike','alice']
                }
            }
        }
    </script>
    
    <style scoped> /* scoped表示该样式只在当前组件中有效 */
        h2{
            color:red;
        }
    </style>
    app文件
    <template>
        <div id="itany">
            <h1>welcome</h1>
            <h2 @click="change">{{name}}</h2>
    
            <User></User>
        </div>
    </template>
    
    <script>
    
        //导入模块
        import User from './components/User.vue'
    
        // console.log(111);
        export default {
            data(){
                return {
                    name:'tom'
                }
            },
            methods:{
                change(){
                    this.name='汤姆';
                }
            },
            components:{
                User
            }
        }
    </script>
    
    <style>
        body{
            background-color:#ccc;
        }
    </style>
    vue文件

        3、安装相关模板    

           cnpm install vue -S                      //package.json文件内就有响应的数据了
             cnpm install webpack -D             //-D表示的是--save-dev
             cnpm install webpack-dev-server -D//静态资源服务器
             cnpm install vue-loader -D
             cnpm install vue-html-loader -D
                cnpm install css-loader -D
             cnpm install vue-style-loader -D
             cnpm install file-loader -D

            cnpm install babel-loader -D
          cnpm install babel-core -D
            cnpm install babel-preset-env -D  //根据配置的运行环境自动启用需要的babel插件
            cnpm install vue-template-compiler -D //预编译模板

        合并:cnpm install -D webpack webpack-dev-server vue-loader vue-html-loader css-loader vue-style-loader file-loader babel-loader babel-core babel-preset-env  vue-template-compiler

        4、 编写main.js    

    /**
     * 使用ES6语法引入模板
     */
    import Vue from 'vue'         
    import App from './App.vue'     // 从同级目录下的App.vue文件中引入App.vue模块,并从新取名为App。
    
    new Vue({
        el:'#app',
        render:function(h){ //使用render函数渲染组件
            return h(App);
        }
    });
    View Code


        5、 编写webpack.config.js

    module.exports={//进行模块的导出
        //配置入口文件,入库文件为当前目录下的main.js文件
        entry:'./main.js',
        //配置入口文件输出位置
        output:{
            path:__dirname, //指定文件输出位置为项目根路径,默认也是项目的根目录
            filename:'build.js'//将来用的就是这个文件名的文件
        },
        //配置模块加载器
        module:{
            rules:[
                {
                    test:/.vue$/, //所有以.vue结尾的文件都由vue-loader加载
                    loader:'vue-loader'
                },
                {
                    test:/.js$/, //所有以.js结尾的文件都由babel-loader加载,除了node_modules以外
                    loader:'babel-loader',
                    exclude:/node_modules/                //排除node_modules目录的文件
                }
            ]
        }
    }
    View Code

        6、 编写.babelrc  

    {//配置插件
        "presets":[
            ["env",{"module":false}]
        ]
    }
    View Code

        7、编写package.json

    {
      "name": "webpack-demo",
      "version": "1.0.0",
      "description": "",
      "main": "main.js",
      "scripts": {
        "dev":"webpack-dev-server --open --hot --port 8800"//dev脚本名称(随意),webpack-dev-server启动服务器,--open启动之后打开浏览器,--hot热加载,--port打开的端口
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "vue": "^2.3.4"
      },
      "devDependencies": {
        "babel-core": "^6.25.0",
        "babel-loader": "^7.1.1",
        "babel-preset-env": "^1.5.2",
        "css-loader": "^0.28.4",
        "file-loader": "^0.11.2",
        "vue-html-loader": "^1.2.4",
        "vue-loader": "^13.0.0",
        "vue-style-loader": "^3.0.1",
        "vue-template-compiler": "^2.3.4",
        "webpack": "^3.0.0",
        "webpack-dev-server": "^2.5.0"
      }
    }
    View Code

        8、 运行测试
            npm run dev     //实际上就是执行package.json文件内的scripts命令

        9、运行测试之前要编写index.html文件

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <div id="app"></div>
        <script src="build.js"></script>  //之前在webpack.config.js中写的名称现在要引入过来
    </body>
    </html>
    View Code





        

      

  • 相关阅读:
    读取数据变JSON传值!
    YII2.0多条件查询升级版
    JS跳转页面方法
    yii的简单片段缓存
    我读过的最好的epoll讲解--转自”知乎“
    I/O多路复用详解
    ”open-close"prinple (OCP)
    获取本机的IPv4或者v6地址
    .Net 下未捕获异常的处理
    TCP断开连接的过程
  • 原文地址:https://www.cnblogs.com/xuanan/p/7861533.html
Copyright © 2011-2022 走看看