解析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}
vue2中src實現資料繫結遇到的問題
在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