Angular中的模板

Angular自身提供了一套完整的模板系統(tǒng),配合$scope對(duì)象和數(shù)據(jù)雙向綁定機(jī)制厘惦,將頁(yè)面純靜態(tài)元素經(jīng)過行為垂涯、屬性的添加和格式的轉(zhuǎn)換,最終變成在瀏覽器中顯示的動(dòng)態(tài)頁(yè)抵蚊。

在模板系統(tǒng)中施绎,可包含Angular的指令、數(shù)據(jù)綁定贞绳、表單控件和過濾器谷醉,同時(shí),在處理復(fù)雜程序時(shí)冈闭,可以構(gòu)建多個(gè)模板頁(yè)面作用于視圖層俱尼。在主頁(yè)中,再通過包含(include)的方式加載這些零散的模板頁(yè)萎攒。這樣做的好處在于遇八,一次定義可多處調(diào)用,增加代碼的重復(fù)使用耍休,減少維護(hù)成本刃永。

1. 構(gòu)建模板內(nèi)容

 ① 直接在頁(yè)面中添加元素和Angular指令,依賴控制器中構(gòu)建的屬性和方式綁定模板中的元素內(nèi)容和事件羹应,實(shí)現(xiàn)應(yīng)用需求揽碘。
 ② 通過"type"類型為"text/ng-template"的<script>元素來構(gòu)建一個(gè)用于綁定數(shù)據(jù)的模板,在模板內(nèi)部添加數(shù)據(jù)綁定和元素的事件。
 ③ 通過添加元素的"src"屬性雳刺,導(dǎo)入一個(gè)外部文件作為綁定數(shù)據(jù)的模板劫灶,在導(dǎo)入數(shù)據(jù)模板時(shí),除添加"src"屬性外掖桦,還需要使用"ng-include"指令本昏。

例1:首先通過<script>元素構(gòu)建了一個(gè)顯示兩項(xiàng)數(shù)據(jù)信息的模板;然后枪汪,在新增的一個(gè)<div>元素中將模板的內(nèi)容導(dǎo)入到元素中涌穆。

<script type="text/ng-template" id="tplbase">
    姓名:{{name}},<br>
    郵箱:{{email}}
</script>
<div ng-include src="'tplbase'" ng-controller="fn"></div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('aa',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.name="zyt";
        $scope.email="zouyitingRae@163.com"
    }])
//    先添加一個(gè)"type"類型為"text/ng-template"的<script>元素雀久,并在該元素中通過雙花括號(hào)的方式綁定控制器中需要顯示的兩項(xiàng)數(shù)據(jù)宿稀。
//    由于該元素定義的是Angular類型的模板,因此赖捌,它可以直接使用Angular中的表達(dá)式進(jìn)行數(shù)據(jù)綁定祝沸,除此之外,還可以在模板中綁定元素的各類事件

//    在完成模板內(nèi)容構(gòu)建之后越庇,新添加一個(gè)<div>元素罩锐,用來導(dǎo)入模板內(nèi)容。在導(dǎo)入時(shí)卤唉,首先添加"ng-include"指令涩惑,聲明該元素的內(nèi)容來源于其他模板;
//    然后再添加"src"屬性桑驱,指定對(duì)應(yīng)模塊的名稱竭恬,即ID號(hào)或模板文件名稱。需要注意的是:"src"屬性值是一個(gè)表達(dá)式碰纬,它可以是$scope中的屬性名萍聊,
//    也可以是普通字符串问芬。如果是后者悦析,必須添加引號(hào)
</script>

2. 使用指令復(fù)制元素

在構(gòu)建模板內(nèi)容的過程中,有時(shí)需要反復(fù)將不同的數(shù)據(jù)加載到一個(gè)元素中此衅,例如强戴,通過< li>元素綁定一個(gè)數(shù)組的各成員季俩。此時(shí)量蕊,可以使用"ng-repeat"指令,它的功能時(shí)根據(jù)綁定數(shù)組成員的數(shù)量坞淮,復(fù)制頁(yè)面中被綁定的< li>元素墨微,并在復(fù)制過程中添加元素相應(yīng)的屬性和方法道媚,通過這種方式,實(shí)現(xiàn)數(shù)組數(shù)據(jù)與元素綁定的過程。
在使用"ng-repeat"指令復(fù)制元素的過程中最域,還提供了幾個(gè)非常實(shí)用的專有變量谴分,可以通過這些變量來處理顯示數(shù)據(jù)時(shí)的各種狀態(tài)。這些變量的功能分別如下:

  --$first镀脂,該變量表示記錄是否是首條牺蹄,如果是則返回true,否則返回false.
  --$last薄翅,該變量表示記錄是否是尾條沙兰,如果是則返回true,否則返回false.
  --$middle翘魄,該變量表示記錄是否是中間條鼎天,如果是則返回true,否則返回false.
  --$last暑竟,該變量表示記錄的索引值训措,其對(duì)應(yīng)的值從0開始.

例2:在頁(yè)面中,通過< li>元素顯示一個(gè)數(shù)組中的全部成員數(shù)據(jù)光羞,并且在顯示數(shù)據(jù)時(shí)列出當(dāng)條數(shù)據(jù)是否是“首條”和“尾條”記錄的狀態(tài)信息绩鸣。

   <style>
        body{font-size: 12px;}
        ul{list-style: none;width: 400px;margin: 0;padding: 0;}
        li{float: left;padding: 5px 0;}
        span{width: 50px;float: left; padding: 0 10px;}
    </style>
<div ng-controller="fn">
    <ul>
        <li>
            <span>序號(hào)</span>
            <span>姓名</span>
            <span>性別</span>
            <span>是否首條</span>
            <span>是否尾條</span>
        </li>
        <li ng-repeat="stu in data">
            <span>{{$index+1}}</span>
            <span>{{stu.name}}</span>
            <span>{{stu.sex}}</span>
            <span>{{$first?'是':'否'}}</span>
            <span>{{$last?'是':'否'}}</span>
        </li>
    </ul>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('aa',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.data=[
            {name:'趙四',sex:'女'},
            {name:'張三',sex:'男'},
            {name:'王二',sex:'男'},
        ]
    }]);
</script>

3. 添加元素樣式

① 直接綁定值為CSS類別名稱的$scope對(duì)象屬性
    例:$scope.red="red";
       <div class="{{red}}"></div>   ===   <div ng-class="{{red}}"

② 以字符串?dāng)?shù)組方式選擇性添加CSS類別名稱
    例:$scope.blnfocus=true;
       <div ng-class="{true:'red',false:'blue'}[blnfocus]"></div>
       <div>的CSS樣式取決與"blnfocus"屬性值,當(dāng)該值為true時(shí)纱兑,添加“red”樣式名呀闻,當(dāng)該值為false時(shí),添加“blue”樣式名潜慎。這種方式只能在兩種樣式中選擇一種捡多,并且{}和[]順序不可顛倒。在{}中設(shè)置可選擇的兩種樣式名稱铐炫,在[]中設(shè)置控制樣式的的屬性名垒手。

③ 通過定義key/value對(duì)象的方式來添加多個(gè)CSS類別名稱
    例:$scope.a=false;
        $scope.b=true;
        <div ng-class="{'red':a,'blue':b}"></div>

此外,在Angular中倒信,還有另外兩個(gè)用于添加樣式的頁(yè)面指令科贬,分別為"ng-class-odd"和"ng-class-even"專用于以列表方式顯示數(shù)據(jù),對(duì)應(yīng)奇數(shù)行和偶數(shù)行的樣式鳖悠。

例3:在例2的基礎(chǔ)上榜掌,在樣式方面增加三個(gè)功能,首先乘综,將第一個(gè)< li>元素中顯示的字體加粗憎账;其次,添加"ng-class-odd"和"ng-class-even"兩個(gè)指令卡辰,實(shí)現(xiàn)列表的隔行變色功能胞皱;最后邪意,當(dāng)單擊某行< li>的元素時(shí),顯示相應(yīng)的背景色反砌。

<style>
        body{font-size: 12px;}
        ul{list-style: none;width: 408px;margin: 0;padding: 0;}
        li{float: left;padding: 5px 0;}
        ul .odd{color: #0026ff;}
        ul .even{color: #f00;}
        ul .focus{color: #ccc;}
        ul .bold{font-weight: bold;}
        span{width: 52px;float: left; padding: 0 10px;}
</style>

<div ng-controller="fn">
    <ul>
        <li ng-class="{{bold}}">
            <span>序號(hào)</span>
            <span>姓名</span>
            <span>是否首條</span>
            <span>是否尾條</span>
        </li>
        <li ng-class-odd="'odd'" ng-class-even="'even'" ng-repeat="stu in data" ng-click="li_click($index)" ng-class="{focus:$index==focus}">
            <span>{{$index+1}}</span>
            <span>{{stu.name}}</span>
            <span>{{stu.sex}}</span>
            <span>{{$first?'是':'否'}}</span>
            <span>{{$last?'是':'否'}}</span>
        </li>
    </ul>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('aa',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.bold='bold';
        $scope.li_click= function (i) {
            $scope.focus=i;
        }
        $scope.data=[
            {name:趙四',sex:'女'},
            {name:'張三',sex:'男'},
            {name:'王二',sex:'男'},
        ]
    }]);
</script>

4.控制元素的顯示與隱藏狀態(tài)

在Angular中抄罕,可以通過“ng-show”“ng-hide”“ng-switch”指令來控制元素的隱藏與顯示的狀態(tài)。前兩個(gè)指令直接控制元素的顯示與隱藏狀態(tài)于颖。當(dāng)“ng-show”值為true或“ng-hide”值為false時(shí)呆贿,元素顯示,反之森渐,元素隱藏做入。
后一個(gè)“ng-switch”指令的功能是顯示匹配成功的元素,該指令需要結(jié)合"ng-switch-when"和"ng-switch-default"指令使用同衣。在"ng-switch"指令中竟块,當(dāng)指定的“on”值與某個(gè)或多個(gè)添加"ng-switch-when"指令的元素匹配時(shí),這些元素顯示耐齐,其他未匹配的元素則隱藏浪秘。如果沒有找到與“on”值相匹配的元素時(shí),則顯示添加了"ng-switch-default"指令的元素埠况。
例4:

<div ng-controller="fn">
    <div ng-show={{isShow}}>zyt</div>
    <div ng-hide={{isHide}}>zouyitingrae@163.com</div>
    <ul ng-switch on={{switch}}>
        <li ng-switch-when="1">zyt</li>
        <li ng-switch-when="2">zouyitingrae@163.com</li>
        <li ng-switch-default>更多...</li>
    </ul>
</div>
<script src="js/angular.min.js"></script>
<script>
    var mod = angular.module('aa',[]);
    mod.controller('fn',['$scope', function ($scope) {
        $scope.isShow = true;
        $scope.isHide = false;
        $scope.switch = 3;
    }]);
</script>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末耸携,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子辕翰,更是在濱河造成了極大的恐慌夺衍,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喜命,死亡現(xiàn)場(chǎng)離奇詭異沟沙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)壁榕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門矛紫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牌里,你說我怎么就攤上這事颊咬。” “怎么了二庵?”我有些...
    開封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵贪染,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我催享,道長(zhǎng),這世上最難降的妖魔是什么哟绊? 我笑而不...
    開封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任因妙,我火速辦了婚禮痰憎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘攀涵。我一直安慰自己铣耘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開白布以故。 她就那樣靜靜地躺著蜗细,像睡著了一般。 火紅的嫁衣襯著肌膚如雪怒详。 梳的紋絲不亂的頭發(fā)上炉媒,一...
    開封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音昆烁,去河邊找鬼吊骤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛静尼,可吹牛的內(nèi)容都是我干的白粉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼鼠渺,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鸭巴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起拦盹,我...
    開封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤奕扣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后掌敬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惯豆,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年奔害,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了楷兽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡华临,死狀恐怖芯杀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情雅潭,我是刑警寧澤揭厚,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站扶供,受9級(jí)特大地震影響筛圆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椿浓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一太援、第九天 我趴在偏房一處隱蔽的房頂上張望闽晦。 院中可真熱鬧,春花似錦提岔、人聲如沸仙蛉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)荠瘪。三九已至,卻和暖如春赛惩,著一層夾襖步出監(jiān)牢的瞬間哀墓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工坊秸, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麸祷,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓褒搔,卻偏偏與公主長(zhǎng)得像阶牍,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子星瘾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容