1. 程式人生 > >解析angularjs中的三種資料繫結策略

解析angularjs中的三種資料繫結策略

 匯入:我們想要實現這樣的效果:當我們點選標題的時候展示下面的內容,再點選則收回去。

      

一、首先回顧一下有哪些繫結策略?



 看這個實在是有點抽象了,我們來看具體的例項分析吧!

二、簡單的Demo例項

   @繫結:傳遞一個字串作為屬性的值。比如 str : ‘@string’

   控制器中程式碼部分示例: 

myDirec.controller('MyCtrl3',['$scope',function($scope){
   $scope.ctrlFlavor="雞尾酒";
   
   $scope.sayHello=function(name){
       alert("Hello "+name);
   };
   
}]);

myDirec.directive("drink",function(){
    return{
          restrict:'AE',
          scope:{
                flavor:'@'  //自動繫結,傳遞的是字串
          },
          template:"<div>{{flavor}}</div>",
    };
});

  頁面中使用標籤部分示例:
<div ng-controller="MyCtrl3">
       <drink flavor="{{ctrlFlavor}}"></drink>
    </div>

  分析我們在drink指令中為什麼能取得在父作用域中的值呢?原因就在於我們使用了@繫結策略,可以將ctrlFlavor賦值給flavor,這樣在模板中就能取到該值了。

   =繫結指定獲取屬性的型別為父作用域的屬性

myDirec.directive("drink2",function(){
    return{
        restrict:'AE',
        scope:{
            flavor:'='  //自動繫結
        },
        template:'<input type="text" ng-model="flavor"/>'
    };
});

   頁面:

<div ng-controller="MyCtrl3">
        <drink2 flavor="ctrlFlavor"></drink2>
    </div>

    執行的流程是這樣的:

  ① 指令被編譯的時候會掃描到template中的模型發現有一個flavor

  ② 查詢scope中是否定義:通過=與父作用域繫結,方式是傳遞父作用域中的屬性ctrlFlavor;

  ③ flavor與父作用域中的ctrlFlavor屬性繫結,找到它的值“雞尾酒”;

  ④ 將model的值顯示在模板中。

       &繫結:傳遞的是父作用域中的函式

控制器部分:

myDirec.directive("greeting", function() {
    return {
        restrict:'AE',
        scope:{
            greet:'&'
        },
        template:'<input type="text" ng-model="userName" /><br/>'+
                 '<button ng-click="greet({name:userName})">問候一下</button><br/>'
    };
});


        頁面部分:

<div ng-controller="MyCtrl3">
            <greeting greet="sayHello(name)"></greeting>
            <greeting greet="sayHello(name)"></greeting>
            <greeting greet="sayHello(name)"></greeting>
</div>

     從結果上看,三個輸入框中的內容互不影響,因為都是新的獨立作用域,能夠完成從檢視到模型的繫結。

三、Expander示例

           首先看控制器程式碼:

/*Expander示例*/
myDirec.controller('SomeController',function($scope) {
    $scope.title = '點選展開';
    $scope.text = '這裡是內部的顯示的內容';
});

myDirec.directive('expander', function() {
    return {
        restrict : 'EA',
        replace : true,
        transclude : true,
        scope : {
            title : '=expanderTitle'
        },
        template : '<div>'
                 + '<div class="title" ng-click="toggle()">{{title}}</div>'
                 + '<div class="body" ng-show="showMe" ng-transclude></div>'
                 + '</div>',
        link : function(scope, element, attrs) {
            scope.showMe = false;
            scope.toggle = function() {
                scope.showMe = !scope.showMe;
            };
        }
    };
});

       再看頁面部分:
<div ng-controller='SomeController'>
        <expander class='expander' expander-title='title'> {{text}} </expander>
 </div>

執行的流程是這樣的:

  ① 指令被編譯的時候會掃描到template中的模型發現有一個{{title}}

  ② 查詢scope中是否定義:通過=與父作用域繫結,方式是傳遞父作用域中的屬性;

    我總是在這裡犯糊塗,解釋下這個“方式是傳遞父作用域中的屬性”,這個在哪裡用的呢?

<div ng-controller='SomeController'>
        <expander class='expander' expander-title='title'> {{text}} </expander>
 </div>
    看到沒,指令中的屬性expander-title='title',這不就是傳遞父作用域中的屬性嗎?

  ③ expander-title與父作用域中的title屬性繫結,找到它的值“點選展開”;

  ④ 將title的值顯示在模板中。

           注意:指令中的獨立作用域中的屬性title是為了給下面的模板使用 的,而title所對應的值,要依據頁面中指令的使用傳人具體的父作用域中的屬性,完成屬性的繫結操作。

           總之、我們可以利用angularjs為我們提供的資料繫結策略來實現從父作用域向指令中傳值,這個很有用哦!


          不知道講清楚了沒,歡迎批評指正O(∩_∩)O~

相關推薦

解析angularjs資料策略

 匯入:我們想要實現這樣的效果:當我們點選標題的時候展示下面的內容,再點選則收回去。        一、首先回顧一下有哪些繫結策略?  看這個實在是有點抽象了,我們來看具體的例項分析吧! 二、簡單的Demo例項    @繫結:傳遞一個字串作為屬性的值。比如 st

vue06-資料方式

<!DOCTYPE html> <html lang=en> <head> <meta charset="utf-8"/>

js事件之間的關係和事件處理函式裡的this值

<!DOCTYPE HTML> <html > <head>     <meta charset="UTF-8"> </head> <body> <div id="b" onclick="cons

angularjs的雙向資料的demo

<!DOCTYPE html> <html>     <head>         <meta charset="utf-8">         <style type="text/css">           

從一段.html程式碼說起談談AngularJs的雙向資料

<!DOCTYPE html> <html lang="en" ng-app> <--省略head部分程式碼—> <body> input1: <input type="text" ng-model='message'

vue實現雙向資料原理,使用了Object.defineproperty()方法,方法簡單

在vue中雙向資料繫結原理,我們一般都是用v-model來實現的 ,但一般在面試話會問到其實現的原理, 方法比較簡單,就是利用了es5中的一個方法.Object.defineproperty(),它有三個引數, Object.defineproperty(obj,'val',attrObject), 引數

JS學習筆記——AngularJS 1.x雙向資料機制

0.前言 AngularJS和vueJS是前端比較熱門的兩個框架,AngularJS 1.x是我第一個接觸的框架,雙向繫結是其最大的特點,我們從原生JS的角度看看,這個雙向資料繫結是如何實現的。點這裡看vueJS的雙向繫結原理。 1.簡單的雙向繫結實現

簡要理解vue的mvvm模式的雙向資料

mvvm(Model-View-ViewModel)模式: 由檢視(View)、檢視模型(ViewModel)、模型(Model)三部分組成,結構如下圖。 通過這三部分實現UI邏輯、呈現邏輯和狀態控制、資料與業務邏輯的分離。 使用MVVM模式有幾大好處

wpf datagrid的 DataGridComboBoxColumn資料

wpf  中datagridcomboxColumn的資料繫結主要分下面幾步 1。提供資料來源型別:可以是任意的資料型別:這裡用列舉 public enum OrderStatus { None, New, Processing, Shipped, Received

jface databinding:使用CheckboxTableViewer實現表(Set)物件與CheckTable選中條目資料

上一篇博文《jface databinding:可多選的widget List元件selection專案與java.util.List物件的雙向資料繫結》講述瞭如何實現List元件的多選項與List資料繫結的問題。 實際使用中覺得用List元件來給使用者做多選

vue關於checkbox資料v-model指令的個人理解

vue.js為開發者提供了很多便利的指令,其中v-model用於表單的資料繫結很常見,下面是最常見的例子:<div id='myApp'>    <input type="text" v-model="msg"><br>    {{msg}

vue2src實現資料遇到的問題

在vue2.0中,src實現資料繫結稍不留神就不成功。假定value.src是繫結的資料。 常見錯誤寫法1: <img src="value.src"> 錯誤之處在於: 1.屬性值資料繫結應該用v-bind,應該寫成v-bind:src=""

微信小程式開發第資料,點選事件,陣列迴圈

前面介紹了註冊以及專案結構,現在開始開發吧。 1。資料繫結,如果學過vue.js的小夥伴應該很快會上手。小程式的資料繫結也是{{}},下面看例子吧 首先清空index.wxml的程式碼 <view> <text>{{name}}</tex

AngularJS核心特性——雙向資料

一 單向資料繫結 目前大多數前端框架都是單向資料繫結:JQuery、BackBone、Flex。模型發生了變化,檢視也隨之變化。 二 雙向資料繫結 一旦檢視發生了變化,模型也會發生變化。

asp.net---幾資料方法

1.使用Eval方法,該方法用於定義單向(只讀)繫結<asp:Lable id="lable1" runat="server" Text='<%#DataBind.Eval(Container.DataItem,"UserName")%>'/>簡化版&

JS的雙向資料及Object.defineProperty方法

緣起前幾天在看一些流行的迷你mvvm框架(比如avalon.js、 vue.js 這種較輕的框架,而非Angularjs、Emberjs這種較重的框架)的實現。現代流行的mvvm框架一般都會將資料雙向繫結(two-ways data binding)做掉,作為框架自

WPF關於資料方式及注意細節

前言》 首先,簡單介紹一下,什麼是資料繫結?一種用宣告的方式將控制元件和資料繫結在一起的方式。 簡單來理解一下就是:控制元件的屬性由你繫結的資料來動態判斷的方式。 《核心前提部分》 一個繫結(Binding)關係由四個元件構成:     1

淺談angularjs指令的策略

在angularjs的指令中存在著三種繫結策略,他們分別是’=’,’@’,’&’ 全文討論圍繞下面這個例子,可在進入codepen編輯 ‘=’繫結策略 ‘=or(=attr)’,雙向繫結,將本地作用域上的屬性同父級作用域上的屬性

AngularJs 在ng-repeat動態使用ng-model進行雙向資料

首先說明一下功能需求: 當點選一次增加按鈕的時候,下方就會多一行輸入框; 當點選一次刪除按鈕的時候,所點選的刪除按鈕那行的輸入框會消失; 當點選列印資訊按鈕的時候,把所有輸入框中的資料讀取出來,並列印到控制檯上。 由此可看出,帶有刪除按鈕的這部分DIV是動態的。

AngularJS》——scope的策略

三種繫結符的含義: scope:{}使當前指令作用域與外界隔離開來,使其模板(template)處於non-inheriting(無繼承)的狀態 @的含義:把當前作用域屬性當字串傳遞,繫結外層scop