Angular和Vue雙向數(shù)據(jù)綁定的實現(xiàn)原理(重點是vue的雙向綁定)
我在整理javascript高級程序設計的筆記的時候看到面向對象設計那章,講到對象屬性分為數(shù)據(jù)屬性和訪問器屬性,我們平時用的js對象90%以上都只是用到數(shù)據(jù)屬性;我們向來講解下數(shù)據(jù)屬性和訪問器屬性到底是什么?
數(shù)據(jù)屬性:數(shù)據(jù)屬性包含一個數(shù)據(jù)值的位置,在這個位置可以讀取和寫入值.
訪問器屬性:訪問器屬性不包含數(shù)據(jù)值;他們包含一對getter和setter函數(shù)在讀取訪問器屬性時,會調用getter函數(shù),這個函數(shù)負責返回有效的值,在寫入訪問器屬性時,會調用setter函數(shù)并傳入新值.
這里介紹的重點是訪問器屬性,設置對象的訪問器屬性只能用es5的Object.defineProrerty()方法,如下例子:
var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
return this._year
},
set:function (newValue) {
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.edition);//2
console.log(book.year);//2005
也就是當執(zhí)行book.year=2005的時候其實是執(zhí)行了year中的set方法,當執(zhí)行book.year的時候執(zhí)行了year的get方法;
var book={
_year:2004,
edition:1
};
Object.defineProperty(book,"year",{
get:function () {
console.log("year get")
return this._year
},
set:function (newValue) {
console.log("year set")
if(newValue>2004){
this._year=newValue;
this.edition+=newValue-2004;
}
}
});
book.year=2005;
alert(book.year);
控制臺的提示是:

這個原理就是vue雙向數(shù)據(jù)綁定的原理,我們在vue組件中的data聲明屬性數(shù)據(jù)的時候其實在對象中的已經將這個屬性封裝成了訪問器屬性.

每個屬性都有get和set方法,在做雙向的數(shù)據(jù)的控制都在get和set方法中,因為無論你是在ready(2.0是mounted了)或是在view中改變值都會觸發(fā)set方法,將新值復制進去,在重新在view中匹配值,當然你們有更復雜的控制操作,get方法著是讓ready中獲取的這個屬性值一直保存最新值.
angular1的雙向數(shù)據(jù)綁定是臟數(shù)據(jù)監(jiān)測,簡單點說就是監(jiān)測新值和舊值有沒有變化,這種方式就要定時監(jiān)測了咯.兩種性能的消耗感覺不在一個層次上的啊.
就好比用html5 Sockets做后臺主動消息推送前端和用js定時器每個5秒發(fā)送請求到后臺捕獲消息的性能差距一樣.
還有之前寫的js面向對象分層的思想其實也可以用在vue項目中,以前我一直以為vue的data層其實就是個擺設,但在api發(fā)現(xiàn)computed屬性之后data層完全可以實現(xiàn)發(fā)送ajax取數(shù)功能,沒必要在全都放到ready(2.0是mounted了)里面,這個ready(2.0是mounted了)可以只負責數(shù)據(jù)格式出來,或者控制頁面的動態(tài)效果而已.這js的結構就像后臺MVC那樣層次功能分明清晰.這也只是我突然想到的思路還沒真正應用到實際項目中,只是給在用vue的朋友提供個思路.
import data from '../assets/js/data'
export default{
data(){
return{
menu:data.menu,
inde:"",
row:"",
clomu:""
}
},
computed:{
isfull:function () {
alert(111);
return 11;
}
},
mounted(){
},
methods:{
domclick:function (i) {
if(this.inde===i){
this.inde="";
}else {
this.inde = i;
}
},
subclick:function (i,o) {
this.row=i;
this.clomu=o;
}
}
}
以上所述是小編給大家介紹的Angular和Vue雙向數(shù)據(jù)綁定的實現(xiàn)原理(重點是vue的雙向綁定),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網站的支持!
- vue.js數(shù)據(jù)綁定的方法(單向、雙向和一次性綁定)
- 淺談vue中關于checkbox數(shù)據(jù)綁定v-model指令的個人理解
- Vue.js實現(xiàn)雙向數(shù)據(jù)綁定方法(表單自動賦值、表單自動取值)
- 簡單談談Vue 模板各類數(shù)據(jù)綁定
- vue.js使用v-model實現(xiàn)表單元素(input) 雙向數(shù)據(jù)綁定功能示例
- vue.js數(shù)據(jù)綁定操作詳解
- vue 標簽屬性數(shù)據(jù)綁定和拼接的實現(xiàn)方法
- Vue.js數(shù)據(jù)綁定之data屬性
- vue實現(xiàn)動態(tài)數(shù)據(jù)綁定
- vue實現(xiàn)雙向數(shù)據(jù)綁定
相關文章
解決創(chuàng)建vue項目后沒有vue.config.js文件的問題
這篇文章給大家主要介紹如何解決創(chuàng)建vue項目后沒有webpack.config.js(vue.config.js)文件,文中有詳細的解決方法,感興趣的朋友可以參考閱讀下2023-07-07
vue3結合ts從零實現(xiàn)vueuse的useRouteQuery方法
這篇文章主要為大家詳細介紹了如何使用vue3與ts從零實現(xiàn)一個類vueuse的useRouteQuery方法,并解決vueuse的useRouteQuery方法存在的一些問題,感興趣的可以了解下2024-03-03
如何修改element-ui日期下拉框datetimePicker的背景色樣式
這篇文章主要介紹了修改element-ui日期下拉框datetimePicker的背景色樣式的操作代碼,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧2024-07-07
Element el-table的formatter和scope?template不能同時存在問題解決辦法
本文主要介紹了ElementUI?el-table?的?formatter?和?scope?template?不能同時存在問題解決辦法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-08-08

