AngularJs學習筆記2-控制器、數據綁定、作用域

来源:http://www.cnblogs.com/yaosutu/archive/2017/07/09/7141157.html
-Advertisement-
Play Games

上次分享完該系列文章後有朋友也建議說1.x版本除了維護也沒有必要學習,可以學習2.0開始學習,我也知道1.x無論是從性能還是架構上都沒有2.x好,但是我想因為現在也有一些朋友還在用1.x版本,因為1.x升級到2.x難度很大,甚至可以說重構,就向我們公司現在還在用1.x版本,所以我還是決定把這系列寫完 ...


   上次分享完該系列文章後有朋友也建議說1.x版本除了維護也沒有必要學習,可以學習2.0開始學習,我也知道1.x無論是從性能還是架構上都沒有2.x好,但是我想因為現在也有一些朋友還在用1.x版本,因為1.x升級到2.x難度很大,甚至可以說重構,就向我們公司現在還在用1.x版本,所以我還是決定把這系列寫完,也給自己一個整理的過程。本人現在也正在學習Angular4.0版本的學習,但是4.0用typescript及nodejs集成比較大,還有學習angular-cli腳手架的學習,所以等我學會以後準備在分享給大家。這個暫時先不討論,今天繼續給大家分享控制、數據綁定、作用域的知識點。

1、控制器:

  概念:在angularJS中控制器是一個函數,用來向視圖的作用域添加額外的功能,用來設置作用域的初始狀態並添加自定義行為。

       控制器的聲明: app.controller(‘controllerName’,function($scope){...})

//    控制器定義
    //    第一參數: 控制器名稱, 第二個參數: 匿名函數, 傳入作用域,併在作用域上添加額外功能
    app.controller('myCtrl', function($scope) {
        $scope.expression = "hello expression";
        $scope.ngbind = "hello ng-bind";
        $scope.htmlbind = "<font color='red'>hello,htmlbind</font>";
        $scope.subCtrl = "hello subCtrl";

    });

      控制器的使用:在需要的地方(html某個標簽上)添加ng-controller。

<body ng-app="myapp" ng-controller="myCtrl">

 從上面看控制的定義和使用還是比較簡單的,但是很多人會對控制器的作用及控制器中都需要寫什麼代碼有些不瞭解,有的人會把整個代碼都推擠到控制器中,我個人覺得控制器只是一個頁面view及mode的一個紐帶,只處理一些數據綁定,事件綁定等等一些列簡單的邏輯,具體的伺服器訪問或者數據讀取等應該在服務里去實現,服務我在下次的時候會詳細給大家說。

我簡單對控制使用方面註意的事項整理了一下,供大家參考:

1)儘可能精簡控制器和$scope相關的操作。
2)不要復用Controller,一個控制器一般只負責一小塊視圖。
3)不要在Controller中操作DOM,這不是控制器的職責。
4)儘量不要在Controller里做數據過濾、數據操作。
5)一般來說,Controller里不會互相調用的,控制器之間的交互會通過事件進行

 2、作用域($scope)

上面控制器中也提到作用域,控制器主要跟$scope相關的操作,我簡單給大家說一下作用域在AngularJs中的作用及他的生命周期,我用內部分享時的總結貼出來給大家分享一下:

      3、數據綁定:

    AngularJs數據綁定也有好幾種綁定,我給大家列出來,有可能大家都用過,有可能有的朋友有些綁定沒有用過。

          1)表達式{{}}:
                       常量:{{‘const’}}
                       變數:{{abc}}
                       函數:{{func()}}
                      表達式:{{a+b}}

               該方法是最為常見的,表達式綁定,只要在Angular的作用域範圍之內Angular遇到該表達式自動解析為Html識別的表達式或者變數。

         2)指令方式(ng-bind):

                    該綁定方式為在元素上添加ng-bind指令,然後Angular解析指令並執行該綁定。

          3)ng-model:

                    該方式主要用在表單提交方面用的比較多,實現數據雙向綁定,頁面內容及model之間實現雙向數據。

          4)ng-bind-html:

      該方式為主要針對Html元素綁定時用,因為Angularjs預設對Html標簽不做解析,直接輸出,所以想在頁面上顯示Html標簽內容可以藉助該綁定方法,但是該綁定需要引用一個序列化js文件。

 <script type="text/javascript" src="/lib/angular-1.3.0.14/angular-sanitize.min.js"></script>

         5)ng-bind-template:

      該方式可以一次綁定多個變數及表達式。

         使用場景:

             首頁使用ng-bind, 模板裡面的頁面可以使用括弧 {{}},表單使用ng-model,{{}}語法的缺陷:在用戶的不斷刷新中是有可能看到{}的;而且在網路不好的情況下也有可能看到

         如下代碼為把上述五種方法的整體代碼:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>首頁</title>
    <!--引用AngularJs庫    -->
    <script type="text/javascript" src="/lib/angular-1.3.0.14/angular.js"></script>
    <!--    引入angularJs Html格式化庫-->
    <script type="text/javascript" src="/lib/angular-1.3.0.14/angular-sanitize.min.js"></script>
</head>

<!--   數據綁定方式1、{{}} 2、指令綁定 3、ng-bind綁定 4、ng-bind-html綁定 5、ng-bind-template綁定-->

<body ng-app="myapp" ng-controller="myCtrl">
    <!--    1、表達式綁定 -->
    <h1>{{expression}}</h1>
    <!-- 2、指令綁定-->
    <h2>{{ngmodel}}</h2>
    <input type="text" ng-model="ngmodel">
    <!--    3、ng-bind綁定-->
    <h3 ng-bind="ngbind"></h3>
    <h3 class="ng-bind:ngbind"></h3>
    <!--    4、ng-bind-html綁定-->
    <h4 ng-bind-html="htmlbind"></h4>
    <!--    5、ng-bind-template -->
    <h5 ng-bind-template="{{ngbind}},{{1+1}}"></h5>
</body>

</html>
<script>
    //模塊定義
    // 第一個參數:應用名稱,第二個參數:應用依賴模塊
    var app = angular.module('myapp', ['ngSanitize']);

    //    控制器定義
    //    第一參數: 控制器名稱, 第二個參數: 匿名函數, 傳入作用域,併在作用域上添加額外功能
    app.controller('myCtrl', function($scope) {
        $scope.expression = "hello expression";
        $scope.ngbind = "hello ng-bind";
        $scope.htmlbind = "<font color='red'>hello,htmlbind</font>";
        $scope.subCtrl = "hello subCtrl";

    });

</script>

 

           


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

-Advertisement-
Play Games
更多相關文章
  • ngrx 是 Angular框架的狀態容器,提供可預測化的狀態管理。 1.首先創建一個可路由訪問的模塊 這裡命名為:DemopetModule。 包括文件:demopet.html、demopet.scss、demopet.component.ts、demopet.routes.ts、demopet ...
  • 這是我的第一遍博文,我來試試感覺 ...
  • 1.正則表達式 js 中判斷某個元素是否存在於某個 js 數組中,相當於 PHP 語言中的 in_array 函數。 Array.prototype.in_array=function(e){ var r=new RegExp(','+e+','); return (r.test(','+this. ...
  • 1.xhtml和html有什麼區別 HTML是一種基本的WEB網頁設計語言,XHTML是一個基於XML的置標語言 最主要的不同: XHTML 元素必須被正確地嵌套。 XHTML 元素必須被關閉。 標簽名必須用小寫字母。 XHTML 文檔必須擁有根元素 2、簡述一下src與href的區別: href ...
  • 如果你是一個人在自學前端開發,或者是對前端開發有比較濃厚的興趣正想踏入前端領域,只要你在前端自學路上遇到了自己無法解決的技術難題,那麼儘管將你的疑惑交給我的小伙伴兒們吧,我們都是一群在前端自學路上摸爬滾打的有志青年,希望你可以來和我們共同交流。同時也希望你能獻出自己的一份力,幫助我的小伙伴兒們解決他 ...
  • 上一篇的gulp配置很簡單,主要就是為了demo的查看和調試,這一篇則會相對詳細一些,包括壓縮合併打時間戳等。 在互聯網環境比較好的城市,需要多人協作的,大一點的項目應該都用上了模塊化(這裡主要指commonjs和ES6模塊系統,不是再早的require.js和sea.js)。代碼也會更註重如何分離 ...
  • 摘要: 前端框架 Bootstrap 的模態對話框,可以使用 remote 選項指定一個 URL,這樣對話框在第一次彈出的時候就會自動從這個地址載入數據到 .modal-body 中,但是它只會載入一次,不過通過在事件中調用 removeData() 方法可以解決這個問題。 1. Bootstrap ...
  • 1、對於string,number等基礎類型,==和 是有區別的 1)不同類型間比較,==之比較“轉化成同一類型後的值”看“值”是否相等, 如果類型不同,其結果就是不等 2)同類型比較,直接進行“值”比較,兩者結果一樣 2、對於Array,Object等高級類型,==和 是沒有區別的 進行“指針地址 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...