什麼是VUE?VUE與JS的對比

2020-12-05 程序思維

1.1. vue的引入

先看下面這樣一個簡單的例子,實現了這樣一個功能

數據的雙向綁定:也就是數據的同步修改

邏輯分析: 1. 我們需要一個UI元素和屬性相互綁定的方法 2. 我們需要監視屬性和UI元素的變化 3. 我們需要讓所有綁定的對象和元素都能感知到變化

1.1.1. vue與js的對比

1.1.1.1. js的實現(了解)

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>Demo</title>

</head>

<body>

<div>

<h4>數據的雙向綁定----js的實現</h4>

<input type="text" data-bind-1="name" />

<input type="text" data-bind-1="name" />

</div>

</body>

</html>

<script>

function DataBinder(object_id) {

// Create a simple PubSub object

var pubSub = {

callbacks: {},

on: function(msg, callback) {

this.callbacks[msg] = this.callbacks[msg] || [];

this.callbacks[msg].push(callback);

},

publish: function(msg) {

this.callbacks[msg] = this.callbacks[msg] || [];

for(var i = 0, len = this.callbacks[msg].length; i < len; i++) {

this.callbacks[msg][i].apply(this, arguments);

}

}

},

data_attr = "data-bind-" + object_id,

message = object_id + ":input",

timeIn;

changeHandler = function(evt) {

var target = evt.target || evt.srcElement, // IE8 compatibility

prop_name = target.getAttribute(data_attr);

if(prop_name && prop_name !== "") {

clearTimeout(timeIn);

timeIn = setTimeout(function() {

pubSub.publish(message, prop_name, target.value);

}, 50);

}

};

// Listen to change events and proxy to PubSub

if(document.addEventListener) {

document.addEventListener("input", changeHandler, false);

} else {

// IE8 uses attachEvent instead of addEventListener

document.attachEvent("oninput", changeHandler);

}

// PubSub propagates changes to all bound elements

pubSub.on(message, function(evt, prop_name, new_val) {

var elements = document.querySelectorAll("[" + data_attr + "=" + prop_name + "]"),

tag_name;

for(var i = 0, len = elements.length; i < len; i++) {

tag_name = elements[i].tagName.toLowerCase();

if(tag_name === "input" || tag_name === "textarea" || tag_name === "select") {

elements[i].value = new_val;

} else {

elements[i].innerHTML = new_val;

}

}

});

return pubSub;

}

function DBind(uid) {

var binder = new DataBinder(uid),

user = {

// ...

attributes: {},

set: function(attr_name, val) {

this.attributes[attr_name] = val;

// Use the `publish` method

binder.publish(uid + ":input", attr_name, val, this);

},

get: function(attr_name) {

return this.attributes[attr_name];

},

_binder: binder

};

// Subscribe to the PubSub

binder.on(uid + ":input", function(evt, attr_name, new_val, initiator) {

if(initiator !== user) {

user.set(attr_name, new_val);

}

});

return user;

}

var DBind = new DBind(1);

DBind.set("name", "黃奇");

</script>

1.1.1.2. vue的實現

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<!--1. 引入js文件-->

<script src="../node_modules/vue/dist/vue.js"></script>

</head>

<body>

<!--2. 視圖 view-->

<div id="app">

<h4>數據雙向綁定----vue</h4>

<input type="text" name="" id="" v-model="message" />

<input type="text" name="" id="" v-model="message" />

</div>

</body>

</html>

<script type="text/javascript">

//數據模型

var dataModel = {

message: "hello"

}

//viewModel ----連接視圖和數據模型

var app = new Vue({

el: "#app",

data: dataModel

})

</script>

1.2. Vue是什麼

1.2.1. 描述(vue的發展史)

1.2.2. 概念

vue是一個構建用戶界面的框架(庫),它的目標是通過儘可能簡單的api實現響應的數據綁定和組合的視圖集合 vue自身不是一個全能框架的核心是只關注視圖層,因此它非常容易學習,非常容易與其它庫或已有項目整合 vue在與相關工具和支持庫一起使用時, 也能完美地驅動複雜的單頁應用,在之後的課程中,我們會配合webpack來使用

1.2.3. 特點

1.2.3.1. 響應的數據綁定/響應式編程

保持狀態和數據的同步

Vue.js 的核心是一個響應的數據綁定系統,它讓數據與 DOM 保持同步非常簡單。在使用 jQuery 手工操作 DOM時,我們的代碼常常是命令式的、重複的與易錯的。 Vue.js 擁抱數據驅動的視圖概念。通俗地講,它意味著我們在普通 HTML 模板中使用特殊的語法將 DOM「綁定」到底層數據。一旦創建了綁定,DOM 將與數據保持同步。 每當修改了數據,DOM 便相應地更新。這樣我們應用中的邏輯就幾乎都是直接修改數據了,不必與 DOM更新攪在一起。這讓我們的代碼更容易撰寫、理解與維護。

1.2.3.2. 組件化

組件(Component)是 Vue.js 最強大的功能之一。組件可以擴展 HTML 元素,封裝可重用的代碼。 在較高層面上,組件是自定義元素, Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生 HTML 元素的形式,以 is 特性擴展。

相關焦點

  • vue高級進階系列——用typescript玩轉vue和vuex
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫用過vue的朋友大概對vuex也不陌生,vuex的官方解釋是專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。
  • Vue全家桶之什麼是Vuex
    Vuex 是什麼?Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。Vuex 是幹什麼的?試想一下,如果在一個項目開發中頻繁的使用組件傳參的方式來同步data中的值,一旦項目變得很龐大,管理和維護這些值將是相當棘手的工作。
  • Vue.js 教程:構建一個特斯拉汽車餘電計算器
    行駛速度、氣溫和輪轂尺寸會對續航裡程有什麼影響?在本教程中,我們會使用 Vue.js 這個容易理解的 JavaScript 框架製作一個儀錶盤,通過它可以計算特斯拉電動汽車在不同情況下的行駛距離。作為本教程的起點,請克隆這個 Github 存儲庫:https://github.com/petereijgermans11/workshop-reactjs-vuejs然後轉至 vuejs-app 目錄。
  • 5分鐘帶你入門vuex(vue狀態管理)
    如果你之前使用過vue.js,你一定知道在vue中各個組件之間傳值的痛苦,在vue中我們可以使用vuex來保存我們需要管理的狀態值,值一旦被修改,所有引用該值的地方就會自動更新,那麼接下來我們就來學習一下vuex是如何修改狀態值的:我們新建一個vue項目(這裡由於我們是講解vuex,所以對於vue項目的創建我們不會講解太詳細);在命令行輸入 vue init
  • vue3.0手機聊天室|Vue3+Vant3仿微信界面
    項目簡介Vue3Chat是基於vue3.x+vuex4+vue-router4全家桶技術和vant3.x構建開發的一款mobile仿微信界面聊天實例。實現了發送圖文消息、圖片|視頻預覽、位置查看、紅包|朋友圈等功能。
  • ref vue 獲取文本專題及常見問題 - CSDN
    ref的官網介紹https://cn.vuejs.org/v2/api/#ref需求在普通的js操作中,一般都是直接操作dom元素,但是對於Vue.js框架來說,一般是不允許直接操作dom元素的。那麼其實Vue.js框架提供了ref獲取dom元素,以及組件引用。
  • Vue 3 的最新進展
    Vue.js 作者尤雨溪近日介紹了 Vue 3 的最新進展。Vue Router目前存在部分與 vue-router@3.x 相關的路由鉤子(router hook)行為一致性問題,這也是 Vue Router 沒有被標記為 Beta 的原因。不過在非關鍵項目上可以使用新的路由。
  • Vue.js深入學習
    vue.jsv-cloak:解決網速慢閃爍問題 ,不會替換掉標籤裡面的內容v-text:會替換掉標籤裡面的內容:原樣輸出v-html:會解析標籤v-bind:綁定屬性的指令,縮寫.參數1,指令的名稱,定義的時候,指令的前面不需要加V-前綴,用的時候才加3.參數2,是一個對象,這個對象身上有一些指令相關的函數,這些函數在特定的階段執行相關的操作Vue.directive('focus',{bind:function(el){函數中第一個參數永遠是el,表示被綁定了指令的那個元素,是一個原生的js
  • Vue+Axios+Vuex+Vux+Vue-Router全家桶搭建前端框架
    開發成本也就高了;二、再來看看React,出身名門FaceBook,社區比較多,而且還可以跨平臺運行,React-Native可以實現一次編寫,安卓、蘋果、web通殺;但是學習也需要一段時間,而且後期維護也不容易;其他的我們就不一一介紹了,最後來看看今天的重頭戲Vue;三、Vue,值得我們驕傲的是,國人發明的,一款漸進式框架,能與現有項目無縫融合,也就是說現有項目可以逐步更新替換使用vue
  • slot vue 具名專題及常見問題 - CSDN
    vue的slot1、什麼是slotslot是插槽,插即是可以插入,槽就是坑,即是可以再代碼中插入如果子組件模板中不包含插口,那麼父組件的內容將會被丟棄。當子組件模板中有一個麼有屬性的插槽時,父組件傳入的整個內容片段,將插入到插槽所在的dom的位置,並替換掉插槽標籤本身。
  • 如何寫一個vue組件專題及常見問題 - CSDN
    如何使用vue寫一個組件庫新建vue項目使用vue-cli初始化一個項目:vue init webpack VueComponentcd VueComponentnpm installnpm run dev以上就新建好了一個vue項目項目目錄首先,定義好目錄,經過觀察大多數的組件庫,基本是這樣的目錄
  • 4種可用於組織大型Vue.js項目的最佳實踐
    這就是在大型項目中將要面臨的真實情況,不過,Vue.js可以提供針對此問題的現場解決方案。我們可以在Vue.js中使用slots來提供表示父子關係的另一種方法,slots提供了將內容放置在新位置的渠道。
  • template標籤 vue 作用專題及常見問題 - CSDN
    template slot="footer"> <p>底部信息信息1</p> <p>底部信息信息2</p> </template> </base-layout> </div> <script type="text/javascript" src="js
  • a標籤 href vue專題及常見問題 - CSDN
    vue.js 實現a標籤href裡添加參數原始碼列表可以正常顯示,但是連接沒有實現對items.orderNo的值轉化,最中解決方法
  • 在vue項目中使用vuex實現狀態管理的案例
    並不需要使用vuex。vuex的使用與否在實際開發中應該視項目情況而定。準備工作:a.在vue項目中安裝vuex: npm install vuex -S。b.了解下vuex的五個屬性。vuex個屬性五個屬性的作用:state:用來存儲vuex的基本數據。
  • vue 具名插槽詳解專題及常見問題 - CSDN
    /npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> {{message}} <tode-item>這是一個默認插槽<h3>這是標籤h3</h3></tode-item
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    比如vue,通過數據的雙向綁定,極大了提高了開發效率。3. MVVM框架:VUE的介紹Vue就是基於MVVM模式實現的一套框架,在vue中:Model:指的是js中的數據,如對象,數組等等。View:指的是頁面視圖viewModel:指的是vue實例化對象為什麼說VUE是一個漸進式的javascript框架, 漸進式是什麼意思?
  • 如何創建vue項目並使用element框架中的el-select
    1、在電腦硬碟上,找到一個位置,新建一個文件夾wmn;滑鼠右鍵選擇Git Bash Here,並在Git窗口輸入cnpm install --global vue-cli命令:cnpm install --global vue-cli
  • vue-element-admin 4.0.0 正式版發布
    重大改變 基於 vue-cli@3進行構建 調整了項目的目錄結構 mock 文件移至根目錄下 layout 從 views 文件夾下移至 src 下 使用了最新的 eslint-plugin-vue
  • Angular、React 當前,Vue.js 優劣幾何?
    很多時候,人們不會給 Vue.js 足夠的關注。因此,我想分享一些有關 Vue.js 的信息,以及我在使用 Vue.js 來構建生產應用中獲得的一些個人經驗。現在讓我們一起來問這個問題:Vue.js 是適合你的框架嗎?注意:我並不想說 Vue.js 比 React、Angular 或者其它的任何前端框架好。這裡我分享的只是我在項目中使用 Vue.js 而獲得的一些個人體驗。