模型和控制器-起步階段

MVVM簡介

針對客戶端應用開發AngularJS吸收了傳統的MVC基本原則。MVC(Model-View-Controll)設計模式針對不同的人可能意味不同的東西 ,AngularJS并不執行傳統意義上的MVC,更接近于MVVM。

MVVM模式是Model-View-ViewMode模式的簡稱。由視圖(View)、視圖模型(ViewModel)、模型(Model)三部分組成,通過這三部分實現UI邏輯、呈現邏輯和狀態控制、數據與業務邏輯的分離。

Model將和ViewModel互動(通過$scope對象),將監聽Model的變化。這些可以通過View來發送和渲染,由HTML來展示你的 代碼。View可以通過$routeProvider對象來支配,所以你可以深度的鏈接和組織你的View和Controller,將他們變成導航 URL。AngualrJS同時提供了無狀態的Controller,可以用來初始化和控制$scope對象。

Model與MVC模式一樣,Model用于封裝與應用程序的業務邏輯相關的數據以及對數據的處理方法。它具有對數據直接訪問的權利,例如對數據庫的訪問,Model不依賴于View和ViewModel,也就是說,模型不關心會被如何顯示或是如何被操作,模型也不能包含任何用戶使用的與界面相關的邏輯。

ViewModel是一個用來提供特別數據和方法從而維護指定view的對象,。ViewModel是$scope的對象,只存在于AnguarJS的應用中。$scope只是一個簡單的js對象,這個對象使用簡單的API來偵測和廣播狀態變化。

Controller負責設置初始狀態和參數化$scope方法用以控制行為。需要指出的controller并不保存狀態也不和遠程服務互動。

View是AngularJS解析后渲染和綁定后生成的HTML。這個部分幫助你創建web應用的架構。$scope擁有一個針對數據的參考,controller定義行為,view處理布局和互動。

使用MVVM模式有幾大好處:

?

1. 低耦合:View可以獨立于Model變化和修改,一個ViewModel可以綁定到不同的View上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。

2. 可重用性:可以把一些視圖的邏輯放在ViewModel里面,讓很多View重用這段視圖邏輯。

3. 獨立開發:開發人員可以專注與業務邏輯和數據的開發(ViewModel)。設計人員可以專注于界面(View)的設計。

4. 可測試性:可以針對ViewModel來對界面(View)進行測試。

?

控制器

AngularJS控制器控制AngularJS應用程序的數據,是常規的JavaScript對象。

ng-controller指令就是用來定義應用程序控制器的,并且同時創建了一個新的作用域關聯到相應的DOM元素上。

所謂作用域就是一個指向應用模型的對象,它是表達式的執行環境,作用域有層次結構,這個層次和相應的DOM幾乎是一樣的,作用域能監控表達式和傳遞事件并且可以從父作用域繼承屬性。

每一個AngularJS應用都有一個絕對的根作用域。但也可能有多個子作用域。 一個應用可以有多個作用域,因為有一些指令會生成新的子作用域,當新作用域被創建的時候,他們會被當成子作用域添加到父作用域下,這使得作用域會變成一個和相應DOM結構一個的樹狀結構。

?

控制器屬性

現在我們就用ng-controller指令來創建一個簡單的控制器定義,如下所示:

  1. <div ng-app="" ng-controller="MyController">
  2. <p>請輸入一個名字:<input type="text" ng-model="person.name"> </p>
  3. <p>Hello <span ng-bind="person.name"></span> </p>
  4. </div>
  5. <script>
  6. function MyController($scope) {
  7. $scope.person = {
  8. name: "World"
  9. };
  10. }
  11. </script>

如上所述,我們通過ng-controller指令創建了一個JavaScript對象 —— MyController并帶有name屬性,那參數$scope是什么呢,代表什么意思呢。

現在我們就來解答MyController對象參數 —— $scope。

$scope就是把一個DOM元素連結到控制器上的對象,它提供一個綁定到DOM元素(以及其子元素)上的執行上下文。它也是一個JavaScript對象,指向應用程序作用域內的所有HTML元素和執行上下文。作用域呢,就是作為$scope的數據屬性關聯到DOM上的,并且能在需要調試的時候被獲取到。

要明確創建一個$scope對象,我們就要給DOM元素安上一個controller對象,使用的是ng-controller 指令屬性。

所有$scope都遵循原型繼承,這意味著它們都能訪問父$scope們,對任何屬性和方法,如果AngularJS在當前$scope上找不到,就會到父$scope上去找,如果在父$scope上也沒找到,就會繼續向上回溯,一直到$rootScope上,這個$rootScope是最頂級的$scope,它對應著含有 ng-app指令屬性的那個DOM元素,也就是說根作用域關聯的DOM就是ng-app指令定義的地方。

也就是說,擁有了$scope,我們就可以操作作用域內任何我們想要獲取的對象數據。

?

控制器方法

控制器不僅聲明屬性也可以聲明方法,如下所示:

  1. <div ng-app="" ng-controller="MyController">
  2. Your name:
  3. <input type="text" ng-model="username">
  4. <button ng-click="sayHello()">打招呼</button>
  5. <hr>
  6. {{greeting}}
  7. </div>
  8. ?
  9. <script>
  10. function MyController($scope) {
  11. $scope.username = 'World';
  12. $scope.sayHello = function() {
  13. $scope.greeting= 'Hello ' + $scope.username + '!';
  14. };
  15. }
  16. </script>

參考以上代碼,趕快動手試試控制器的使用方法吧!

當然如果是開發條件的需要,我們也可以將控制器寫在外部文件中,那如上示例該怎么做呢,很簡單,如下簡單引用即可:

  1. <script src="MyController.js"></script>

轉載于:https://www.cnblogs.com/rainheader/p/4623954.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375793.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375793.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375793.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Apache開啟Gzip壓縮

1. 編輯Apache的httpd.conf文件 vim /etc/httpd/conf/httpd.conf 2. 開啟mod_deflate.so模塊 LoadModule deflate_module modules/mod_deflate.so 3. 對該模塊進行配置 # ShiftG到最下一行添加如下內容<IfModule mod_deflate.c> # 壓縮等級 9 DeflateCompressionLevel 9 …

計算機的網絡與結構,計算機結構與組成29-網絡.ppt

計算機結構與組成29-網絡CS61C L221 Performance ? UC Regents I/O Review I/O gives computers their 5 senses I/O speed range is 12.5-million to one Differences in processor and I/O speed ? synchronize with I/O devices before use Polling works, but expensive …

Canvas動畫 位圖緩存提高效率和對應的內存問題

對一個矢量圖動畫&#xff0c;開啟位圖緩存能大大提高運行效率。所謂開啟位圖緩存&#xff0c;其實要自己動手&#xff0c;先創建一個臨時canvas&#xff0c;然后把矢量圖繪制到這個canvas上&#xff0c;到了實際繪制時&#xff0c;直接把這個臨時canvas拷貝到真正canvas上。而…

ASP.NET MVC 學習第一天

今天開始第一天學習asp.net mvc&#xff0c;寫的不是很好&#xff0c;高手不要噴&#xff0c;希望大家能一起進步學習。 好了&#xff0c;開始學習 新建項目&#xff0c;選擇mvc 4應用程序 接下來選擇基本&#xff0c;視圖引擎當然要選擇Razor&#xff0c;如果在選擇aspx那我們…

python提取字符串中的數字

字符串存儲在string.txt中&#xff0c;將字符串中的數字提取出來&#xff0c;組成心得字符串&#xff0c;并打印輸出。 #!/usr/bin/env python3 fileopen(/home/user/string.txt) file_contextfile.read() i0 string while i < len(file_context):if file_context[i].isdig…

計算機顯示發送報告,Word文檔打不開提示發送錯誤報告的解決方法

經常使用word文檔的人員都會碰到過這種發送錯誤報告情況&#xff0c;既然有這個問題就要查個究竟什么原因造成&#xff0c;才能完美解決&#xff0c;那么今天小編就在這里講解word文檔發送錯誤報告的方法。根本原因是&#xff1a;打開word出現提示word發送錯誤報告的故障其主要…

asp.net mvc 如何在View中獲取Url參數的值

如果url是 /home/index?id3 直接Request就ok。 但是如果路由設定為&#xff1a;{controller}/{action}/{id} url是 /home/index/3 這時想在頁面View中獲取參數id的值&#xff0c;該怎么獲取&#xff1f; 查了下資料好多人都利用Action獲取到參數值后&#xff0c;用Viewdata…

js 控制

js 制動控制 代碼 是 :setInterval(function(){$(".egg").click();},1000); 使用方法&#xff1a;調出瀏覽器放控制臺(console)&#xff0c;一般是按F12&#xff0c;將上述代碼粘貼后回車就可以自動運行了。轉載于:https://www.cnblogs.com/Look_Sun/p/3798903.htm…

python讀取文本文件的三種方法

參考鏈接 python讀取文本文件的內容&#xff0c;有三種方法。 read()、readline()、readlines() read() read()是最簡單的一種方法&#xff0c;一次性讀取文件的所有內容放在一個大字符串中&#xff0c;即內存中。 fileopen(test.txt) try:file_contextfile.read() #file…

圖靈計算機模型意義,圖靈機有什么意義_學習圖靈機模型中遇到的問題

圖靈機意義圖靈提出圖靈機的模型并不是為了同時給出計算機的設計&#xff0c;它的意義我認為有如下幾點&#xff1a;1、它證明了通用計算理論&#xff0c;肯定了計算機實現的可能性&#xff0c;同時它給出了計算機應有的主要架構&#xff1b;2、圖靈機模型引入了讀寫與算法與程…

使用MVVM-Sidekick開發Universal App(一)

終于要邁進Universal的大坑了&#xff0c;還有點小激動呢。 CurrencyExchanger 掌中匯率是我前幾年發布在Windows Phone商店中的一個應用&#xff0c;當時是WP7版本&#xff0c;下載鏈接&#xff1a;http://www.windowsphone.com/zh-cn/store/app/%E6%8E%8C%E4%B8%AD%E6%B1%87%…

NewCode----給定兩個數R和n,輸出R的n次方

參考鏈接 輸入描述: 多組測試用例&#xff0c;請參考例題的輸入處理 輸入每行一個浮點數 R 其中0.0 < R <99.999&#xff0c; 一個整數 n 其中0 < n <25 輸出描述: 輸出R的n次方 輸入例子1: 95.123 12 0.1 1 輸出例子1: 548815620517731830194541.89902534…

如何檢測本計算機耗電量,如何查看電腦耗電量?魯大師查看電腦使用功率的方法...

【www.xinr41319.cn--電腦網絡】查看自己電腦的電源功率有兩大好處&#xff0c;第一知道給臺式電腦配置多大的電源&#xff0c;第二可以精確的算出&#xff0c;一臺電腦&#xff0c;一天一般消耗多少電&#xff0c;那么小編教大家來查看一下自己電腦的功率是多少。我們可以要借…

【轉載】COM小結

原文&#xff1a;http://blog.csdn.net/byxdaz/article/details/6595210 一、Com概念 所謂COM&#xff08;Componet Object Model&#xff0c;組件對象模型&#xff09;&#xff0c;是一種說明如何建立可動態互變組件的規范&#xff0c;此規范提供了為保證能夠互操作&#xff0…

解決Dropbox無法連接的問題

同步共享服務Dropbox從6月18日開始再次遭到封鎖&#xff0c;原因是DNS污染。Dropbox上次在2010年5月曾遭到IP封鎖和網址關鍵字過 濾&#xff0c;2012年5月除文件外鏈功能外其它功能可正常訪問&#xff1b;2014年2月全部功能都可以正常訪問。中國正展開凈網行動&#xff0c;文件…

求任意數的階乘

這是筆試的第二題&#xff0c;求任意數的階乘其實實質也就是大數相乘&#xff0c;很可惜沒有在規定時間內完成這道題&#xff0c;估計這次筆試涼涼。 #include<iostream> using namespace std;int result[200] { 0 }; int N; void fun(int n) {int temp;int i;int carr…

RDLC報表系列一

1、報表項目搭建&#xff1a; 配置好后&#xff0c;單擊Web服務URL:http://lg-20151517ryre/ReportServer 如果電腦系統打開的時候沒有設置密碼的話&#xff0c;此時打開有可能會出現需要登錄名和密碼。如出現此種情況可給Administrator設置密碼。然后刷新當前頁面就可以看大上…

.net 服務器自動執行,自動檢測服務器使用流量并執行命令腳本

#codingutf-8limit_total0# limit_total 上傳下載的流量限制&#xff0c;單位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_in0# limit_in 下載的流量限制&#xff0c;單位GB&#xff0c;如果不限制就是0&#xff0c;如果限制1T就是1024limit_out0# limi…

Android APK是否需要預解壓

今天在逛論壇的時候&#xff0c;發現有一個朋友問的問題。其主要目的&#xff0c;是想實現 玩家首次進入游戲的時候&#xff0c;或者新安裝了版本的時候&#xff0c;對APK進行解壓&#xff0c;寫入SD卡。這樣游戲運行過程中&#xff0c;將不會再從APK中讀取資源。 以提高效率。…

C++開發秋招筆試題

第一題&#xff1a; 記得不太清了&#xff0c;湊合看吧&#xff01; 輸入&#xff1a; 第一行&#xff1a;T 表示有T個測試用例 以下N行&#xff1a; 輸入的T個測試用例 測試用例&#xff1a; 每個輸入包含四個輸入&#xff0c;a&#xff0c;b&#xff0c;c&#xff…