zoukankan      html  css  js  c++  java
  • VUE学习笔记——基础标签,函数

    VUE入门

    第一个VUE程序

    使用!tab创建标准html模板,嵌入vue实例化

    <!-- 开发环境版本,包含了有帮助的命令行警告 --> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    

    插入模板语法

    <div id="app">
      {{ message }}
    </div>
    
    
    var app = new Vue({
      el: '#app',
      data: {
        message: 'Hello Vue!'
      }
    })
    

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>test</title>
    </head>
    <body>
        {{ message }}
    
        <h2 id="app" class = "app">
            {{ message }}
            <span> {{message}} </span>>
        </h2>
        <!-- 开发环境版本,包含了有帮助的命令行警告 -->
        <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
        <script>
            var app = new Vue({
                el:"#app",
               //el:".app",
               
               //el:"div",
                data:{
                    message:"VUE hell"
                }
    
    
    
            })
    
        </script>
    </body>
    </html>
    

    el:挂载点

    Vue实例作用范围

    Vue会管理el选项命中的元素及内部的后代元素

    可以使用其他的选择器

    如ID、DIV等,建议使用id

    双标签

    可以使用其他的双标签,不能使用HTML和BODY双标签


    data:数据对象

    • Vue中用到的数据定义在data中
    • data中可以写复杂类型的数据
    • 渲染复杂类型的数据时,遵守js的语法

    本地应用

    使用vue实现简单的网页

    Vue指令

    1、内容绑定,事件绑定

    v-text

    <body>
    
        <div id = "app">
            <h2 v-text="message+'!'"></h2>
            <h2 v-text="info"></h2>
            
            <h2>学院路{{message}}</h2>
    
    
    
    
            {{message}}
                <div>   {{ school.name}} {{school.mobile}} </div>
        
                <ul>
                    <li> {{campus[0]}} </li>
                    <li> {{campus[1]}} </li>
    
                </ul>
        
            </div>
    
    • 设置标签内容--content

    • 插值表达式替换内容

    • 可以写表达式

    v-html

    设置innerHTML

    • 设置元素的innerHTML
    • 内容中有html结构的会被解析为标签
    • v-text指令只会解析为文本
    data:{
                content : "<a href='https://www.bilibili.com/'>link </a>"
    
                   }
    

    v-on

    • v-on指令的作用:为元素绑定事件
    • 事件名不需要写on
    • 指令可以写为@
    • 绑定的方法定义在methods中
    <input type="button" value = "v-on指令" v-on:click = "makenoise">
    <input type="button" value = "v-on简写" @click = "makenoise">
    <input type="button" value = "双击"     @dblclick = "makenoise">
    

    实现网页计数器

    • 创建Vue实例时:el(挂载点),data(数据),methods(方法)
    • v-on
    • this 获取数据

    2、显示切换,属性绑定

    v-show

    image-20201213204813881

    • v-show指令作用:根据真假切换元素的显示状态
    • 原理是修改元素的display,实现隐藏
    • 指令后面内容解析为布尔值
    • 值为true显示,值为false隐藏

    v-if

    基本和v-show相同

    • V-if指令:更具表达式真假切换元素的显示状态
    • 操纵dom元素切换显示状态
    • 表达式值为true,元素存在于dom树中,为false,从dom树中移除
    • 频繁切换v-show否则v-if,前者消耗小

    v-bind

    • 为元素绑定属性

    • 完整写法v-bind:属性名

    • 简写省略v-bind,只保留:属性名

    3、列表循环,表单元素绑定

    v-for

    • v-for:根据数据生成列表结构
    • 数组经常和v-for一起使用
    • 语法是(item,index)in数据
    • item和index可以结合其他指令一起使用
    • 数组长度的更新会同步到页面上,是响应式的

    v-on-补充

    <body>
        <div id ="app">
            <input type ="button" value="点击"  @click="doit(233,'bili')">  
            <input type="text" @keyup.enter="sayhi" >
        </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
    var app = new Vue({
        el:"#app",
    
        methods:{
            doit:function(p1,p2){
                console.log("test");
                console.log(p1);
                console.log(p2 );
            },
            sayhi:function(){
                    alert ("success");
                },   
        }
    })
    </script>
    </body>
    </html>
    
    • 事件绑定,函数调用传形参
    • 定义方法时定义形参接收实参
    • 事件后跟.修饰符 可以进行限制
    • .enter可以限制触发 的按键 为回车键
    • 事件修饰符有多种。

    v-module

    双向数据绑定

    <body>
        <div id ="app"> 
            <input type = "button" value = "修改message" @click="setM">
            <input type ="text" v-model="message" @keyup.enter="getM">
            <h2>{{message}}</h2>
        </div>
    <!-- 开发环境版本,包含了有帮助的命令行警告 -->
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
    <script>
     var app = new Vue({
        el:"#app",
        data:{
            message :"test"
        },
        methods:{
            getM:function(){
                alert(this.message)
            },
            setM:function(){
                this.message="函数";
                    }
        },
     })
    </script>
    </body>
    </html>
    
    • v-module指令:便捷 的设置和获取表单元素的值
    • 绑定的数据会和表单元素的值相关联
    • 绑定的数据和表单元素值一一对应

    前后端分离

    经典的JSP+Servlet+JavaBean的MVC时代

    640?wx_fmt=jpeg

    半分离

    SSM(Spring + SpringMVC + Mybatis)和SSH(Spring + Struts + Hibernate)的Java 框架时代

    640?wx_fmt=jpeg

    步骤如下:
    (1)浏览器请求,CDN返回HTML页面;
    (2)HTML中的JS代码以Ajax方式请求后台的Restful接口;
    (3)接口返回Json数据,页面解析Json数据,通过Dom操作渲染页面;

    后端提供的都是以JSON为数据格式的API接口供Native端使用,同样提供给WEB的也是JSON格式的API接口。

    那么意味着WEB工作流程是:
    1、打开web,加载基本资源,如CSS,JS等;
    2、发起一个Ajax请求再到服务端请求数据,同时展示loading;
    3、得到json格式的数据后再根据逻辑选择模板渲染出DOM字符串;
    4、将DOM字符串插入页面中web view渲染出DOM结构;

    这些步骤都由用户所使用的设备中逐步执行,也就是说用户的设备性能与APP的运行速度联系的更紧换句话说就是如果用户的设备很低端,那么APP打开页面的速度会越慢。

    为什么说是半分离的?因为不是所有页面都是单页面应用,在多页面应用的情况下,前端因为没有掌握controller层,前端需要跟后端讨论,我们这个页面是要同步输出呢,还是异步Json渲染呢?而且,即使在这一时期,通常也是一个工程师搞定前后端所有工作。因此,在这一阶段,只能算半分离。

    首先,这种方式的优点是很明显的。前端不会嵌入任何后台代码,前端专注于HTML、CSS、JS的开发,不依赖于后端。自己还能够模拟Json数据来渲染页面。发现Bug,也能迅速定位出是谁的问题。

    然而,在这种架构下,还是存在明显的弊端的。最明显的有如下几点:
    1)JS存在大量冗余,在业务复杂的情况下,页面的渲染部分的代码,非常复杂;
    2)在Json返回的数据量比较大的情况下,渲染的十分缓慢,会出现页面卡顿的情况;
    3)SEO( Search Engine Optimization,即搜索引擎优化)非常不方便,由于搜索引擎的爬虫无法爬下JS异步渲染的数据,导致这样的页面,SEO会存在一定的问题;
    4)资源消耗严重,在业务复杂的情况下,一个页面可能要发起多次HTTP请求才能将页面渲染完毕。可能有人不服,觉得PC端建立多次HTTP请求也没啥。那你考虑过移动端么,知道移动端建立一次HTTP请求需要消耗多少资源么?

    正是因为如上缺点,我们才亟需真正的前后端分离架构。

    前端框架(KnockoutJS、AngularJS、vueJS、ReactJS)为主的MV*时代

    大家一致认同的前后端分离的例子就是SPA(Single-page application),所有用到的展现数据都是后端通过异步接口(AJAX/JSONP)的方式提供的,前端只管展现。从某种意义上来说,SPA确实做到了前后端分离,但这种方式存在两个问题:

    • WEB服务中,SPA类占的比例很少。很多场景下还有同步/同步+异步混合的模式,SPA不能作为一种通用的解决方案;

    • 现阶段的SPA开发模式,接口通常是按照展现逻辑来提供的,而且为了提高效率我们也需要后端帮我们处理一些展现逻辑,这就意味着后端还是涉足了view层的工作,不是真正的前后端分离。

      SPA式的前后端分离,从物理层做区分(认为只要是客户端的就是前端,服务器端就是后端)这种分法已经无法满足前后端分离的需求,我们认为从职责上划分才能满足目前的使用场景:

    • 前端负责view和controller层

    • 后端只负责model层,业务处理与数据持久化等

      controller层与view层对于目前的后端开发来说,只是很边缘的一层,目前的java更适合做持久层、model层的业务。

      在前后端彻底分离这一时期,前端的范围被扩展,controller层也被认为属于前端的一部分。在这一时期:
      前端:负责View和Controller层。
      后端:只负责Model层,业务/数据处理等。

      可是服务端人员对前端HTML结构不熟悉,前端也不懂后台代码呀,controller层如何实现呢?这就是node.js的妙用了,node.js适合运用在高并发、I/O密集、少量业务逻辑的场景。最重要的一点是,前端不用再学一门其他的语言了,对前端来说,上手度大大提高。

    640?wx_fmt=jpeg

    可以就把Nodejs当成跟前端交互的api。总得来说,NodeJs的作用在MVC中相当于C(控制器)。Nodejs路由的实现逻辑是把前端静态页面代码当成字符串发送到客户端(例如浏览器),简单理解可以理解为路由是提供给客户端的一组api接口,只不过返回的数据是页面代码的字符串而已。

    用NodeJs来作为桥梁架接服务器端API输出的JSON。后端出于性能和别的原因,提供的接口所返回的数据格式也许不太适合前端直接使用,前端所需的排序功能、筛选功能,以及到了视图层的页面展现,也许都需要对接口所提供的数据进行二次处理。这些处理虽可以放在前端来进行,但也许数据量一大便会浪费浏览器性能。因而现今,增加Node中间层便是一种良好的解决方案。

    img

    浏览器(webview)不再直接请求JSP的API,而是:
    1)浏览器请求服务器端的NodeJS;
    2)NodeJS再发起HTTP去请求JSP;
    3)JSP依然原样API输出JSON给NodeJS;
    4)NodeJS收到JSON后再渲染出HTML页面;
    5)NodeJS直接将HTML页面flush到浏览器;

    这样,浏览器得到的就是普通的HTML页面,而不用再发Ajax去请求服务器了。

    Nodejs引领的全栈时代


    Apache Tomcat

    Ajax

  • 相关阅读:
    mysql 优化总结
    mac、linux 查看端口占用程序
    mysql 优化之查询缓存(mysql8已经废弃这个功能)
    laravel 中的 toSql 获取带参数的 sql 语句
    mysql 统计 group by 之后的 group 的个数
    shell 循环语句
    shell 中的流程控制关键字
    为什么要用babel-polyfill
    gulp --watch直接退出,并没有监听
    nodejs安装使用express
  • 原文地址:https://www.cnblogs.com/implus/p/14144568.html
Copyright © 2011-2022 走看看