angularjs入門-ng-bind,ng-cloak,ng-bind-template,sanitize

angularjs入門-ng-bind,ng-cloak,ng-bind-template,sanitize

 


這邊再陸續介紹一些有關Expression的部份,正常狀況下我們都會使用{{hello}}來呈現資料內容。但是如果使用者瀏覽首頁,而且同時下載比較多,或者是網路速度慢的時候,甚

至是程式有bug的話,就會看到如下的畫面,這樣子的畫面不曉得還以為是bug

 

image

 

特別說明一下,但是因為{{}}的方式很方便,如果我們是使用spa的方式來開發,比如使用了ngroute或ui-router的方式的話。其實除了客戶訪問的首頁之外,其餘頁面我們還是可以

使用{{}}的方式,至於ngroute或ui-router是什麼,有興趣的人可以自行先google查一下,但為了預防首頁會看到上圖的問題,所以我們這種時候就需要用ng-bind來處理了。們可以

把{{hello}}改成如下的語法

 

 

 

使用了ng-bind,在解析還沒完全之前,使用者就只會看到空白的一片,其實我們也可以使用ng-cloak的方式,跟ng-bind效果一樣,只是語法稍有不同

 

 

最後我們也可以使用ng-bind-template的方式,可以使用多個表達式

 

 

 

 

接下來就要說明sanitize的部份,為了方便請參考angularjs入門-expression的部份從nuget下載本地端的angularjs。angularjs其實也很顧慮到安全性的問題,所以html會編碼過再輸出,

為了防止xss攻擊的問題,預設angularjs就已經編碼。如果我們就正常輸出html的話,就會如下圖的樣子

 

image

 

 

 

 

 

 

但有時候我們就是會有需求,必須要讓使用者用html編格式,然後我們也希望能把使用者編輯完的樣子,原封不動的輸出,這個時候我們就需要在本地端多加入angular-sanitize.js

然後我們只需要使用ng-bind-html就可以正常輸出了


    <div ng-controller="FirstCtrl">
        <input type="text" ng-model="hello" class="form-control" />
        <span ng-bind-html="hello"></span>
    </div>
    <script src="Scripts/angular.js"></script>
    <script src="Scripts/angular-sanitize.js"></script>
    <script>
        angular.module('App', ['ngSanitize'])
            .controller('FirstCtrl', function ($scope,$timeout) {
               
            });
            
    </script>
</body>

 

image

 

 

 

 

以上歡迎各位提出討論和指教。