zoukankan      html  css  js  c++  java
  • vue 起步

    vue 官网

    目前最火的前端框架当属Vue.js了,很多使用过vue的程序员这样评价它,“vue.js兼具angular.js和react.js的优点,并剔除了它们的缺点”。授予了这么高的评价的vue.js,也是开源世界华人的骄傲,因为它的作者是位中国人–尤雨溪(Evan You)。

    Vue.js 是一个JavaScriptMVVM库,是一套构建用户界面的渐进式框架。它是以数据驱动和组件化的思想构建的,采用自底向上增量开发的设计。相比于Angular.js,Vue.js提供了更加简洁、更易于理解的API,使得我们能够快速地上手并使用Vue.js。

     vue 官网:https://cn.vuejs.org/

     vue 学习手册:https://cn.vuejs.org/v2/guide/index.html

       

    实现 hello world 程序编辑

     vue 不支持 IE8 及以下版本,因为 vue 是用来 IE8 无法模拟的 ECMAScript5 特性,但是它支持所有 ECMAScript5 的浏览器。

     vue.js 开发版本地址:https://vuejs.org/js/vue.js

    目录结构:

       

    原生 js 写法:

    index.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Hello World</title>
    </head>
    <body>
        <div id="app"></div>
    
        <script>
            var dom = document.getElementById("app");
            dom.innerHTML = "hello world"
        </script>
    </body>
    </html>

      

    使用 vue.js 编写:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Hello World</title>
        <!-- 引入 vue.js 库文件 -->
        <script src="vue.js"></script>
    </head>
    <body>
        <!-- 调用 data 中的 content 对应的数据 -->
        <div id="app">{{content}}</div> 
    
        <script>
            // 实例化一个vue实例
            var app = new Vue({
                el:'#app', // 配置项,表示实例负责管理的区域,指id=app的div标签。
                data:{
                    content:"Hello World" 
                }
            }) 
        </script>
    </body>
    </html>

      

    文字两秒钟后动态变换

    原始js

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Hello World</title>
        <!-- 引入 vue.js 库文件 -->
        <script src="vue.js"></script>
    </head>
    <body>
        <div id="app"></div> 
    
        <script>
            var dom = document.getElementById("app")
            dom.innerHTML="hello world"
    
            setTimeout(() => {
                dom.innerHTML="by world"
            }, 2000);
    
        </script>
    </body>
    </html>

    vue.js

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>Hello World</title>
        <!-- 引入 vue.js 库文件 -->
        <script src="vue.js"></script>
    </head>
    <body>
        <!-- 调用 data 中的 content 对应的数据 -->
        <div id="app">{{content}}</div> 
    
        <script>
    
            // 实例化一个vue实例
            var app = new Vue({
                el:'#app', // 配置项,表示实例负责管理的区域,指id=app的div标签。
                data:{
                    content:"Hello World" 
                }
            }) 
            
            setTimeout(() => {
                app.$data.content="by world"
            }, 2000);
    
        </script>
    </body>
    </html>

    使用 Vue.js 实现 TodoList

      

    通过 input 框,想已有列表项中添加一条信息。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>ToDoList</title>
        <!-- 引入库文件 -->
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- v-model 数据-双向绑定 -->
            <input type="text" v-model="inputValue">
            <!-- v-on vue中用来绑定事件 -->
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
    
                <!-- <li>第一课的内容</li>
                <li>第二课的内容</li> -->
    
                <!-- v-for 用来循环 -->
                <li v-for="item in list">{{item}}</li>
    
            </ul>
    
        </div>
    
        <script>
            // 创建一个示例
            var app = new Vue({
                el: '#app',
                // data 用于数据绑定
                data: {
                    // 用于存储数据
                    list: [],
                    // 用于与输入框数据-双向绑定
                    inputValue: '',
                },
                // 用于构造方法
                methods: {
                    // 提交事件
                    handleBtnClick: function () {
                        //  获取 input 框内容.
                        // alert(this.inputValue)
    
                        // push 向集合list添加数据
                        this.list.push(this.inputValue)
                        // 清空输入框
                        this.inputValue = ''
                    }
                }
            })
    
        </script>
    
    </body>
    
    </html>
    

    添加事件:v-on:click="handleBtnClick"

    数据绑定:v-model="inputValue"

    数据循环输出:v-for="item in list"

       

    MVVM 模式

    一般前端设计的 MVP 模式

      

      M:模型层

      V:视图层

      P:控制层

    VUE 的 MVVM 模式

       

      M:模型层

      V:视图层

      VM:ViewModel 层

      总结:以前使用 jQuery 编辑代码的时候主要是使用MVP面向于DOM进行开发,而现在使用MVVM开发的过程中是面向数据进行开发编程。

    前段组件化

       

    组件,是个人页面的一部分。分成多个组件,可以将一个大型的项目按照拼积木的方式搭建起来。一个项目很庞大,但是将这个大项目划分成很多组件,使得每个组件很精小,有利于开发和维护。

    记住一点,每一个组件其实就是页面上的一个区域

    通过组件化,优化 ToDOList 功能

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>ToDoList</title>
        <!-- 引入库文件 -->
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- v-model 数据-双向绑定 -->
            <input type="text" v-model="inputValue">
            <!-- v-on vue中用来绑定事件 -->
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
    
                <!-- <li>第一课的内容</li>
                <li>第二课的内容</li> -->
    
                <!-- v-for 用来循环 -->
                <!-- <li v-for="item in list">{{item}}</li> -->
    
                <!-- 与TodoItem绑定 -->
                <!-- v-bind通过变量content将item传给TodoItem子组件 -->
                <todo-item v-bind:content="item" v-for="item in list"></todo-item>
    
            </ul>
    
        </div>
    
        <script>
            // 创建全局组件,名字叫做TodoItem,内容是li标签。全局组件不需要在vue示例中注册
            // Vue.component("TodoItem", {
            //     // 接受前段绑定的content数据
            //     props: ['content'],
            //     template: "<li>{{ content }} </li>",
            // })
    
            // 局部组件,在示例中必须被注册,全局组件不需要
            var TodoItem = {
                // props是指外部传递回来的数据
                props: ['content'],
                template: "<li>{{ content }}</li>",
            }
    
    
    
            // 创建一个示例
            var app = new Vue({
                el: '#app',
                // 将局部组件注册到示例中。
                components: {
                    TodoItem: TodoItem,
                },
                // data 用于数据绑定
                data: {
                    // 用于存储数据
                    list: [],
                    // 用于与输入框数据-双向绑定
                    inputValue: '',
                },
                // 用于构造方法
                methods: {
                    // 提交事件
                    handleBtnClick: function () {
                        //  获取 input 框内容.
                        // alert(this.inputValue)
    
                        // push 向集合list添加数据
                        this.list.push(this.inputValue)
                        // 清空输入框
                        this.inputValue = ''
                    }
                }
            })
    
        </script>
    
    </body>
    
    </html>
    

      

    组件间传值

    父子组件传值问题,案例,在 ToDoList 案例中添加,点击列项删除功能。

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>ToDoList</title>
        <!-- 引入库文件 -->
        <script src="./vue.js"></script>
    </head>
    
    <body>
        <div id="app">
            <!-- v-model 数据-双向绑定 -->
            <input type="text" v-model="inputValue">
            <!-- v-on vue中用来绑定事件 -->
            <button v-on:click="handleBtnClick">提交</button>
            <ul>
    
                <todo-item v-bind:content="item" 
                v-bind:index="index" 
                v-for="(item,index) in list" 
                @delete="handleItemDelete">
    
                </todo-item>
    
            </ul>
    
        </div>
    
        <script>
    
            var TodoItem = {
                props: ['content','index'],
                // @click=  等同于 v-on:oclick=,方法写在子组件方法当中。
                template: "<li @click='handleItemClick'>{{ content }}</li>",
                methods: {
                    // 子组件点击方法
                    handleItemClick: function () {
                        //当子组件按下,向外触发一个事件。
                        this.$emit("delete",this.index)
                    }
                }
            }
    
    
    
            // 创建一个示例
            var app = new Vue({
                el: '#app',
                // 将局部组件注册到示例中。
                components: {
                    TodoItem: TodoItem,
                },
                // data 用于数据绑定
                data: {
                    // 用于存储数据
                    list: [],
                    // 用于与输入框数据-双向绑定
                    inputValue: '',
                },
                // 用于构造方法
                methods: {
                    // 提交事件
                    handleBtnClick: function () {
                        //  获取 input 框内容.
                        // alert(this.inputValue)
    
                        // push 向集合list添加数据
                        this.list.push(this.inputValue)
                        // 清空输入框
                        this.inputValue = ''
                    },
                    // 父组件删除选项,index为列表元素的下标
                    handleItemDelete: function (index) {
                        // 从传进的下标位置开始删除一项。
                        this.list.splice(index,1)
                    }
                }
            })
    
        </script>
    
    </body>
    
    </html>
    

       

      @click= 等同于 v-on:oclick=

      :content=  等同于 v-bind:content=

  • 相关阅读:
    实验 3:Mininet 实验——测量路径的损耗率
    福州大学软件工程实践个人编程作业
    实验 2:Mininet 实验——拓扑的命令脚本生成
    初识MinIO
    基础《Go学习笔记》读书笔记——函数
    Linux配置Golang 依赖包安装
    《Linux shell 脚本攻略》第1章——读书笔记
    vscode连接云服务,搭建Python远程开发
    Python多线程
    Python多进程
  • 原文地址:https://www.cnblogs.com/wjw1014/p/10252499.html
Copyright © 2011-2022 走看看