日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網營銷解決方案
Angular.js為什么如此火呢?

Angular.js 是一個MV*(Model-View-Whatever,不管是MVC或者MVVM,統(tǒng)歸MDV(model Drive View))JavaScript框架,其是Google推出的SPA(single-page-application)應用框架,其為我們的web應用開發(fā)增加不少魔法變換。

創(chuàng)新互聯(lián)主要業(yè)務有網站營銷策劃、網站設計、成都網站制作、微信公眾號開發(fā)、微信小程序、H5技術、程序開發(fā)等業(yè)務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務的過程中,公司還積累了豐富的行業(yè)經驗、成都全網營銷資源和合作伙伴關系資源,并逐漸建立起規(guī)范的客戶服務和保障體系。 

我可以花整天的時間告訴你為什么你必須在新項目嘗試angular.js,但是我覺得還是百說不如一練。

數據綁定和scopes(作用域)

首先***個浮出大腦的問題是:angular支持數據綁定嗎?

下面讓我們來了解angular.js的數據綁定:

Edit in plucker

 
 
 
 
  1.  
  2. Insert your name:
  3.  
  4.  
  5. Echo: {{user.name}}

  6.  

在這代碼片段中,在我們解釋細節(jié)之前,我還是希望嘗試下其效果:

注:此刻暫時不要太心急去了解ng-app。

如你所見,我在input中輸入的將會顯示在后邊echo。這是如何工作的?簡單來說,angular的ng-model(更多關于指令的將在文章后續(xù))給我?guī)砹穗p向綁定機制。

如此是好,但是user.name存儲在哪里呢?其存儲在我們的$scope上,當我們在input中輸入任何字符都會及時的更新scope對象上的user.name屬性。然后我們可以利用angular的表達式{{...}}現實在HTML中。所以當我們在input中輸入時,其會及時更新scope上的user,name屬性,在由修改HTML顯示。

好吧,這并不難,但是你所說的$scope是個什么東東呢?在angular中$scope是連接controllers(控制器)和templates(模板view/視圖)的主要膠合體。我們可以把我們的model存放在scope上,來達到雙向你綁定。

這就好比:

這意味著我們我們從template上為$scope設置了一個屬性對象user.name,所以我們也可以在controller中訪問這個對象(user.name).

讓我們來看個更復雜的示例:

Edit in plunker

 
 
 
 
  1. var app = angular.module('app', []);
  2. app.controller('MainCtrl', function($scope) {
  3. $scope.message = 'World';
  4. });
  5. Hello, {{ message }}

在這里首先我們定義了angular application,只是簡單的創(chuàng)建了一個angular module,其接受一個module名字和依賴數組為參數。

緊接著創(chuàng)建了一個controller,通過調用 app module的controller方法,并傳入一個controller 名字和function。function函數接受$scope參數(可以接受更多的參數,放在后面部分)。所以我們可以開始雙向綁定了。

在$scope中我們附加了message的字符串屬性。

在view中你可能注意到了body tag多出了一些東東,這是干什么的?這些是angular的指令(directives),它給HTML帶來了新的語法擴展,在這例子中我們使用了兩個angular內置的指令:

ng-app:它會告訴angularbody節(jié)點包含了我們的angular應用,換句話說,在body中的一切會被angular所接受管理。其參數為我們的app module的名字,和我們在javascript中命名一致。

ng-controller:在這指令在我們傳入的是controller 名字,此例中為MainCtrl。

***我們將message插入我們的remplate。

所以其可視化表示將是:

聰明的你可以會冒出一個疑問:我們能夠在$scope上綁定function?

當然。

Edit in plunker

 
 
 
 
  1. var app = angular.module('app', []);
  2. app.controller('MainCtrl', function($scope) {
  3. $scope.greet = function() {
  4. $scope.message = "Hello, " + $scope.user.name;
  5. }
  6. });
  7. What's your name?:
  8. Click here!
  9. {{ message }}

我在示例controller中很容易了解到如何添加function到$scope。示例中function將修改$scope.message為“hello ,”和從input輸入的$scope.user.name的字符串連接。

然后在HTML中創(chuàng)建一個附加了angular bg-click 指令的button。ng-click指令是的button在被點擊時會執(zhí)行我們?yōu)槠滟x值的greet()表達式。

注意:在input中enter并不會工作,這是展示ng-click如何工作。

#p#

指令

我們已經看見了一些指令了,指令是個什么東東?

指令為HTML引入了新的語法。HTML已經很強大了,但是有時我需要更多...

看下面的例子:

 
 
 
 
  • 示例代碼在做什么?除了看見id外,我真的什么也不能獲知。

    然后我們只得從多余30個javascript文件中去查找,***我們看見如下代碼:

     
     
     
     
    1. $('#chart').pieChart({ ... });

    Aha!原來是個餅圖(pie chart)容器。

    在這里如果你不去查找javascript文件將無法獲知頁面到底是做什么的,實現了什么功能。

    下面我們再來看看angular code,

     
     
     
     

    是不是語義很清晰,我們可以一眼看出這是一個pie chart,不僅如此,而且還知道width,height,以及其數據。

    如果你對pie chart 示例感興趣,請猛擊這里

    angular內置指令

    angular給我?guī)砹舜罅康膬戎弥噶?。我們已經在前面看見了ng-app,ng-controller,ng-click,ng-model(angular的內置指令都以ng開始),接下來讓我了解更多的內置指令。

    有時在頁面中有部分內容我們只希望到達某狀態(tài)(屬性為true)才顯示:

    Edit in plunker

     
     
     
     
    1. Show
    2. I am only visible when show is true.

    ng-show僅當angular其表達式值為true時,才顯示該元素或子元素。

    注意:在這里對于ng-click我們并不是直接在controller中創(chuàng)建function(此刻我們沒真正的controller),利用angular表達式作為指令的參數。在***表達式為undefined,然后我們設置為為true,在false如此交替。

    angular同時也提供了ng-hide指令。

    讓我們看些更有趣的指令,如果有個List或者數組呢?

    Edit in plunker

     
     
     
     
    1. var app = angular.module('app', []);
    2. app.controller('MainCtrl', function($scope) {
    3. $scope.developers = [
    4. {
    5. name: "Jesus", country: "Spain"
    6. },
    7. {
    8. name: "Dave", country: "Canada"
    9. },
    10. {
    11. name: "Wesley", country: "USA"
    12. },
    13. {
    14. name: "Krzysztof", country: "Poland"
    15. }
    16. ];
    17. });
    18.   
      •     
      •        {{person.name}} from {{person.country}}
      •     
      •     

    棒極了,我們在controller中定義了一個list對象,在HTML用ng-repeat就能簡單的顯示了。

    它是如何工作的?

    ng-repeat會為集合中的每一項創(chuàng)建一個新的模板,在示例中有四項數據,將會重復創(chuàng)建下面code四次,

     
     
     
     
    1.     {{person.name}} from {{person.country}}

    每次復制都會創(chuàng)建自己新的scope,我們沒有為每項手動創(chuàng)建scope,我們可以把scope理解為其scope,但是在這里我們仍然能夠訪問父scope。

    可視化的展示為:

    我們能自定義directive?

    當然,我們能以不同粒度方式創(chuàng)建angular的directive,例如modal dialogs accordions, paginators, charts,search from ...

    angular指令總是與可視化有關?不,我們仍然可以創(chuàng)建一些非可視化的指令集。

    讓我們來看一個例子吧:

    回到我們上面的greet示例:

     
     
     
     
    1. What's your name?:
    2. Click here!
    3. {{ message }}

    已經能夠很好的工作了,但是我們希望能夠在頁面初始化的時候光標焦點聚焦在輸入框input。jQuery?jQuery提供了focus函數,能夠很簡單的完成,但是這里是angular教程,所以我們需要以angular way,顯得我們更專業(yè)些...

    同時我們也希望我們的HTML能夠有自描述能力(譯者注:現代軟件開發(fā)特別語言語義更重要,如linq,guava,restfull...) ,所以angular directive肯定是個好的選擇。

     
     
     
     
    1. app.directive('focus', function() {
    2.     return {
    3.     link: function(scope, element, attrs) {
    4.     element[0].focus();
    5.     }
    6.     };
    7. });

    接下來,我們可以在可以HTML中標注angular directive(angular directive首字母小寫駝峰命名,在前臺轉換為全小寫-分割風格)。

    directive是angular中最復雜的要點,這里只是最簡單的directive而已,如果可能這將放在以后文章,這里并不會深入。

    directive需要一個object的返回對象,我們可以定義一些需要關注的屬性,在示例中我們返回了一個link的鏈接函數(link函數主要作為directive的行為綁定), 我們如果需要,也可以替換HTML中模板。

    Link function有3個參數(準確應該是是4個)scope,節(jié)點element,還有所有HTML attribute iAttrs。在link函數里我們可以綁定click,mouseenter等事件,注冊指令行為。

    在示例中我們?yōu)橹噶罟?jié)點使用了focus操作。對element了解更多,你可以移步到這里。

    我們可以很簡單的使用指令如下:

     Edit in plunker

     
     
     
     
    1. What's your name?:
    2. Click here!
    3. {{ message }}

    目前我們看見的directive都很簡單,如何利用指令渲染上面說的固定模板呢?

    如下:

     
     
     
     
    1. app.directive('hello', function() {
    2.     return {
    3.     restrict: "E",
    4.     replace: true,
    5.     template: "
      Hello readers, thank you for coming
      "
    6.     }
    7. });

    這里返回的是帶有一些attribute的object。

    • restrict:指令的使用方式

    1. Attribute 形如:

      .

    2. Element 形如:

    3. Class 形如:

    4. CoMment 形如:

    • replace:詢問是不是需要利用我們的模板替換原來的節(jié)點。

    • template:我們需要append或者replace到原節(jié)點的html模板。

    directive還有很多的可配置options,如編譯compile,template url ...

    在示例我們不需要行為的綁定,所有沒有l(wèi)ink function。其使用如下:

    Edit in plunker

     
     
     
     

    #p#

    Filters(過濾器)

    假想我們有個購物車的view顯示如下:

     
     
     
     
    1. There are 13 phones in the basket. Total: {{ 1232.12 }}

    我們如何利用angular表達式顯示為貨幣格式?形如:$1,232.12。

    相當簡單,angular為我們提供了叫filter得東東,過濾器其好比unix中的管道pipeline。angular同時也內置了貨幣currency filter.

     
     
     
     
    1. There are 13 phones in the basket. Total: {{ 1232.12 | currency }}

    如你所見,我們可以用| 使用filter,這和unix管道模型很相似。我們也可以使用|鏈接更多的filter。

    例如我們可以對開發(fā)人員簡單排序,在用ng-repeat顯示出來:

     
     
     
     
      •     
      •     {{ person.name }} from {{ person.country }}
      •     

    在這里你發(fā)現了一些很有趣的事?衛(wèi)門你可以給filter傳遞參數!

    OrderBy filter會接受一個屬性名,并以它進行排序,示例中我們使用 name,如果你希望反序排列,你可以用 -name表示。

    馬上你可能會冒出你頭腦:假想我們不止4個開發(fā)人員,有300,并且我們希望通過 name,country過濾呢?

    非常簡單:

    Edit in plunker

     
     
     
     
    1.     Search: 
    2.     
      •     
      •     {{ person.name }} from {{ person.country }}
      •     
      •     

    在示例中請注意我們是如何綁定search.name的,此處利用name 做filtering。filter的參數不會改變,綁定是search對象,會根據我們在input中輸入改變,而filter則會找尋search對象中的name屬性。

    到這里我希望你也像我一樣一樣興奮起來了!

    下面我們來自定義filter呢?實現單詞首字母大寫 filter:

     
     
     
     
    1. app.filter('capitalize', function() {
    2.     return function(input, param) {
    3.     return input.substring(0,1).toUpperCase()+input.substring(1);
    4.     }
    5. });

    這里我們自定義了一個filter其接受輸入參數input和過濾器參數param的一個函數。

    接下來我們將在view使用它:

     
     
     
     
    1. {{ "this is some text" | capitalize }}

    #p#

    Services

    在文章***,我們需要再次較少下services。這是一個的維護應用程序功能邏輯部分,他是一個單間模式singleton。

    為了保持應用程序的邏輯層次分明,更趨向于將其業(yè)務邏輯放到不同的services,保持controller的邏輯只有流程控制和view交互邏輯。

    angular內置了很多services,如$http http請求,$q 異步promises編程模式...在這里我們不會討論angular的內置services,由于有很多的services,并且很難一次性解釋完,將在后續(xù)文章。我們將創(chuàng)建一個簡單的自定義services。

    在controller之間共享數據對我們很有用,每個controller都有自己的scope所以我們不能將其綁定到其他的controller。所以解決方案是services,可以吧數據共享到services,在需要用到的地方引用它。

    首先我們來看看如果不用services,我們將會遇見什么問題:

     
     
     
     
    1.     MainCtrl:
    2.     
    3.  
  •     
  •     SecondCtrl:
  •     
  •  
     
     
     
    1. app.controller('MainCtrl', function($scope) {
    2. });
    3. app.controller('SecondCtrl', function($scope) {
    4. });

    我們使用了相同的ng-model,預期當一個input改變時候會及時更新到另一個input,如下:

    但是實際情況卻是:

    接下來需要借助services來解決這個問題,利用services將user name在controller之間共享。

     
     
     
     
    1. app.factory('UserInformation', function() {
    2. var user = {
    3. name: "Angular.js"
    4. };
    5. return user;
    6. });

    這里用的是factory去創(chuàng)建一個service。angular中還有其他更高級的方式去創(chuàng)建service,如service,provider,這將會在后續(xù)文章詳解。

    這里有很多方式去創(chuàng)建service,我們選擇的是創(chuàng)建了一個帶有name默認值的user對象,并返回它。

    在controllers中如何去使用呢?如下:

    Edit in plunker

     
     
     
     
    1. app.controller('MainCtrl', function($scope, UserInformation) {
    2. $scope.user = UserInformation;
    3. });
    4. app.controller('SecondCtrl', function($scope, UserInformation) {
    5. $scope.user = UserInformation;
    6. });

    現在我們的程序形如:

    酷極了,它工作了,工作了。

    現在我們的$scope.user在MainCtrl和SecondCtrl都用的是UserInformation,并且service是單例的,所以當我們更新其中一個controller的時候,另外一個也將會被更新。也有你又有了一個疑問:UserInformation參數是從哪里來的?

    angular核心是DI(依賴注入)在需要使用的地方會自定注入service。DI將不會在本節(jié)中講述,我們可以簡單的說,你創(chuàng)建了一個service,你可以在module作用域的controller,directive,甚至是其他service作為參數來輕松使用。

    也許你對上面出現的$scope認為他也是個service,其實這是一個例外,其并不是真正的service注入到我們的controller。

    總結:

    到這里我們完成了***篇但不是***一篇angular博客。

    Angular.js是一個優(yōu)秀的框架,我敢肯定你也愛上了它。希望能在下片文章中仍然能見到你的倩影。

    希望你能enjoyed這篇文章,也能夠評論些你的觀點。

    英文原文:http://angular-tips.com/blog/2013/08/why-does-angular-dot-js-rock/

    譯文鏈接:http://www.cnblogs.com/whitewolf/p/angularjs-start.html


    本文名稱:Angular.js為什么如此火呢?
    文章出自:http://www.5511xx.com/article/dppidos.html