Vue初識:一個前端萌新的總結

来源:https://www.cnblogs.com/AssertionBird/archive/2018/08/14/9474880.html
-Advertisement-
Play Games

一、前言 時隔三年,記得第一次寫博客還是2015年了,經過這幾年的洗禮,我也從一個後端的小萌新變成現在略懂一點點知識的文青。如今對於前端的東東也算有一知半解,個人能力總的來說,也能夠獨立開發產品級項目吧。至於為什麼會前端的東西,估計學.NET的人應該大部分都懂些,之前自己搭建過一套框架,但覺得現在的 ...


一、前言

  時隔三年,記得第一次寫博客還是2015年了,經過這幾年的洗禮,我也從一個後端的小萌新變成現在略懂一點點知識的文青。如今對於前端的東東也算有一知半解,個人能力總的來說,也能夠獨立開發產品級項目吧。至於為什麼會前端的東西,估計學.NET的人應該大部分都懂些,之前自己搭建過一套框架,但覺得現在的時代趨勢吧,前後端分離是主流,再加上想借這次機會改變部門的開發方式,所以就打算改造一下。

  本文僅為個人心得,從實踐項目出發,不講理論,適合萌新學習,如果有說錯了歡迎大家在評論區指出,共同進步,哈哈。

  這裡假定大家的前端技術都達到了熟練使用JavaScript、Html和CSS的地步。

 

二、起步

  2.1 Vue入門需要知道的一些基礎知識

  1. 這是一套用於構建用戶界面的MVVM框架,但有些時候卻又無法實現雙向綁定(需要一些特殊處理,比如子組件更新父組件的屬性)
  2. 非常容易入門,使用OO思想會讓你更加發現這套框架在應用上的簡單(組件化開發)
  3. 使用模板語法(Template),在使用的時候就像寫html一樣
  4. Vue有兩種聲明形式(全局、區域)後面會解釋
  5. Vue這款框架十分霸道,使用之後會發現以前用的Jquery/Bootstrap會被排斥得很厲害(可是我又很不想放棄這兩者一些生態里的東西,怎麼辦?畢竟Vue現在的生態還不是很好。答案是:不使用vue-cli構建的時候,只能在它的生命周期中創建使用,勉強相容,但是有代碼潔癖的話就會很不舒服。如果使用vue-cli構建之後,通過NPM就可以獲取bootstrap-vue、fontawesome-vue等針對vue開發的新東東)
  6. 萌新入門,還是按照官方說法,先不要用vue-cli去構建項目(這種感覺對於我這種後端小渣渣是最為清楚,使用之後瞬間感覺前端這幾年變得極度複雜,貌似這樣顯得逼格更高?)
  7. 下麵就讓我們一步步從簡單的html+js引用的方式使用vue吧,基礎的使用方式在Vue官網里都有,此處就不再對那些內容重寫一遍了。

 

  2.2 Vue頁面級組件的基本結構(每一個頁面對象都大同小異,根據實際需要取捨部分對象屬性即可,記住了就懂了一半)

  

var Test = new Vue({
    el: '#test-vm',    // 此處對應html頁面中一個id=test-vm的元素,必須指定
    data: {
        id: 0         // data是組件內部維護的屬性對象
    },
    computed: {
        newid: function () {
            return this.id === 0  // 此處返回一個boolean值,computed是計算屬性的集合體,裡面每一個屬性都是function,因此數據更新時,也會更新對應的視圖數據
        }
    },
    methods: {
       Test: function () {
          // 方法1內容
       },
       Test2: function () {
         // 方法2內容
      }
    },
    components: {
        'test-input': TestInput    // components 是子組件容器,在這裡引入其他要使用的子組件,多個用,分隔。格式為:'組件名':組件對象 (組件名可以自定義,但要和html對應)
    },
    created: function () {
        // 組件生命周期,此時可以對實例的數據做一些操作,比如用ajax請求數據
    },
    mounted: function () {
       // 組件生命周期,執行到這裡說明整個組件已經渲染完成,在這裡你可以執行一些其他操作,比如實例一個bootstrap-datetimepicker組件
    },
    template: '<div>這是測試內容</div>'  // 這是組件的模板,也就是這裡的內容會被載入在上面el指定的#test-vm元素中,這裡要註意的是template必須只有一個root。
                                       // 你不能寫成<div>標題內容</div><div>主體內容</div>,只能加多一層<div><div>標題內容</div><div>主體內容</div></div>

});  

  2.3 Vue組件的基本結構(每一個組件都大同小異,根據實際需要取捨部分對象屬性即可)

    

// 這是全局聲明組件,這樣每一個引用的組件的components都會預設添加這個組件,就不需要再像上面一樣手動添加
// 局部聲明格式為: var TestInput = { 此處的內容和組件聲明一樣 }
// 此處實現了一個文本框(多行/水印/密碼模式/最大值限制/預設值/禁用)
Vue.component('test-input', {
    props: ['type','placeholder','disabled','multiple', 'maxlength', 'val'],
    data: function () {
     // 此處的data和頁面級組件的data不同,這裡是一個function,需要把內部維護的屬性通過對象的方式return
        return {
            value: '',
            isError: false,
            errorMsg: ''
        }
    },
    computed: {
        contentLength: function () {
            return this.value.length;
        },
        typeObject: function () {
            return this.type ? this.type : 'text';
        }
    },
    watch: {
        // watch是監視器,可以監視組件內部的屬性變化並做出相應處理,屬性命名必須和data或者computed中的屬性一致
        contentLength: function (val, oldVal) {
            if (this.maxlength && val > this.maxlength) {
                this.value = this.value.substring(0, this.maxlength);
            }
        },
        val: function (val, oldVal) {
            if (val) this.value = val;
        }
    },
    created: function () {
        if (this.val) this.value = this.val;
    },
    template: '<div class="input-box">' +
                '<input :disabled="disabled" :type="typeObject" class="form-control"  v-if="!multiple" :placeholder="placeholder" v-model="value"/>' +
                '<textarea :disabled="disabled" class="form-control" v-else  :placeholder="placeholder" v-model="value"></textarea>' +
                '<div v-if="isError">' +
                '<div>{{errorMsg}}</div>' +
                '<div class="arrow"></div>' +
        '</div>' +
        '<i class="fas fa-exclamation-circle fa-lg" v-if="isError" ></i>' +
        '<span class="count" v-if="maxlength">{{value.length}}/{{maxlength}}</span>'+
        '</div>'
});

   2.4 子組件更新父組件屬性與父組件控制子組件內容

    

// 父組件改變子組件的內部屬性
// 父組件內部的屬性通過子組件的props屬性進行傳遞,當父組件屬性值發生改變時,會相應更新子組件視圖,如:
// 必須先聲明子組件,才能聲明父組件
var TestInput = { 
    props: ['type'],
    template:'<input :type="type" ></input>'
}

var view = new Vue({
  el:'#test-vm',
  data:{
      inputType: 'text'
  },
  methods:{
      visibleInputText: function () {
          // 該方法用於轉換子組件文本框的文本類型(密碼/明文)
          this.inputType === 'text'? this.inputType = 'password' : this.inputType = 'text'
      }
  },
  components:{
     'test-input':TestInput
  },
  template:'<div>'+
                  '<button @click="visibleInputText">點擊我修改文本框類型   </button><test-input :type="inputType"></test-input>'+
                '</div>'
})

 

// 子組件更新父組件中的屬性
// 子組件通過$emit來將內部的屬性傳遞給父組件中的方法,並通過父組件內部方法來實現更新。簡單點來說就是一個委托方法:
// 1.子組件內部聲明委托方法名以及將數據傳遞給$emit(變相地給自己增加了一個隱式方法)
// 2.父組件通過綁定子組件聲明的委托方法名把自己的方法傳遞給子組件
var TestInput = {
   data: function () { 
       return {
          value: ''
       }
   },
   methods: {
       textChange: function () {
           // $emit 接受[委托方法名,傳遞參數]兩個參數
           // 所謂的委托方法名,其實就是父組件中給子組件添加綁定的方法名稱
           // 委托方法是一個單參數方法
           this.$emit('ontextchange',this.value)
      }
   },
   template:'<input v-model="value" @onchange="textChange"></input>'
}

var parent = new Vue({
    el: '#text-vm',
    data: {
       childContent: ''     // 子組件文本框的值
   },
   methods: {
       onTextChange: function (value) {
            // 該方法就是委托的方法,value為子組件傳遞的參數
            console.log(value)
this.childContent = value } }, components: { ‘test
-input’: TestInput }, template: '<test-input @ontextchange="onTextChange" ></test-input>' // 上面的ontextchange必須和子組件在$emit中聲明的一致 })

 

 

  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一,效果圖。 二,代碼。 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>html 圖像</title> </head> <body> <!--插入圖像--> <p> An image:<img sr="smiley.gif" ...
  • 作為前端最火的構建工具,是前端自動化工具鏈 最重要的部分 ,使用門檻較高。本系列是筆者自己的學習記錄,比較基礎,希望通過 問題 + 解決方式 的模式,以前端構建中遇到的具體需求為出發點,學習 工具中相應的處理辦法。(本篇中的參數配置及使用方式均基於 ) 一. webpack中的html 對於瀏覽器而 ...
  • 簡單定義:根據不同參數長度來實現讓同一個函數,進行不同處理。 使用: 測試: ...
  • 無意看了這篇 "《jQuery插件開發精品教程,讓你的jQuery提升一個臺階》" 文章,現在做一下總結。 一、jQuery插件的創建可以有三種方法 1.通過$.extend()來擴展jQuery 2.通過$.fn 向jQuery添加新的方法 3.通過$.widget()應用jQuery UI的部件 ...
  • 話不多說直接上代碼 因為項目需求,該動畫中需要顯示即時更新的數據,所以和普通的canvas畫出來的不一樣。但是又不能直接把html畫到canvas中去,彆著急有辦法。 為了繪製 HTML 內容,你要先用<foreignObject> 元素包含 HTML 內容,然後再將這個 SVG 圖像繪製到你的 c ...
  • 最近做項目時碰到一個需求,就是在移動端支付頁面點擊支付按鈕彈出一個支付鍵盤,類似於支付寶的那種。由於項目只是單純的手機網站,而並非app,所以這個功能得由前端來實現。話不多說,先上圖看看效果。 尼瑪,這不就是支付寶app那個支付鍵盤嗎? 沒錯,咱們UI就是參照支付寶做的這個鍵盤。你可能會問,為什麼不 ...
  • 來自:https://blog.csdn.net/wd4871/article/details/50517597 侵刪 父頁面中的iframe :如下 <iframe name="sunPage" id="sunPage" src="sun.html" width="300px" height="a ...
  • 刪除數組第一個元素使用var length = arr.shift(); 刪除arr的第一個元素後, 返回值是刪除後的數組長度 刪除數組最後一個元素使用var length = arr.pop(); 刪除arr的最後一個元素後, 返回值是刪除後數組的長度 在數組開頭添加元素使用var length ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...