### 18.4. 屬性值類型的自定義
官方代碼中的 `ng-show` 等算是我說的這種類型。使用時主要是在節點加添加一個屬性值以附加額外的功能。看一個簡單的例子:
<p color="red">有顏色的文本</p>
<color color="red">有顏色的文本</color>
<script type="text/javascript">
var app = angular.module('Demo', [], angular.noop);
app.directive('color', function(){
var link = function($scope, $element, $attrs){
$element.css('color', $attrs.color);
}
return {link: link,
restrict: 'AE'};
});
angular.bootstrap(document, ['Demo']);
</script>
我們定義了一個叫 `color` 的指令,可以指定節點文本的顏色。但是這個例子還無法像 `ng-show` 那樣工作的,這個例子只能渲染一次,然后就無法根據變量來重新改變顯示了。要響應變化,我們需要手工使用 `scope` 的 `$watch` 來處理:
1 2 <div ng-controller="TestCtrl">
3 <p color="color">有顏色的文本</p>
4 <p color="'blue'">有顏色的文本</p>
5 </div>
6 7 <script type="text/javascript">
8 9 var app = angular.module('Demo', [], angular.noop);
1011 app.directive('color', function(){
12 var link = function($scope, $element, $attrs){
13 $scope.$watch($attrs.color, function(new_v){
14 $element.css('color', new_v);
15 });
16 }
17 return link;
18 });
1920 app.controller('TestCtrl', function($scope){
21 $scope.color = 'red';
22 });
2324 angular.bootstrap(document, ['Demo']);
25 </script>
- Introduction
- 關于AngularJS
- 關于本文檔
- 開始的例子
- 依賴注入
- 作用域
- 數據綁定與模板
- 數據->模板
- 模板->數據
- 數據->模板->數據->模板
- 模板
- 定義模板內容
- 內容渲染控制
- 節點控制
- 事件綁定
- 表單控件
- 模板中的過濾器
- 排序 orderBy
- 過濾列表 filter
- 其它
- 例子:表頭排序
- 例子:搜索
- 錨點路由
- 路由定義
- 參數定義
- 業務處理
- 定義模板變量標識標簽
- AJAX
- HTTP請求
- 廣義回調管理
- 工具函數
- 上下文綁定
- 對象處理
- 類型判定
- 其它服務
- 日志
- 緩存
- 計時器
- 表達式函數化
- 模板單獨使用
- 自定義模塊和服務
- 模塊和服務的概念與關系
- 定義模塊
- 定義服務
- 引入模塊并使用服務
- 附加模塊 ngResource
- 使用引入與整體概念
- 基本定義
- 基本使用
- 定義和使用時的占位量
- 實例
- AngularJS與其它框架的混用(jQuery, Dojo)
- 自定義過濾器
- 自定義指令directive
- 指令的使用
- 指令的執行過程
- 基本的自定義方法
- 屬性值類型的自定義
- Compile的細節
- transclude的細節
- 把節點內容作為變量處理的類型
- 指令定義時的參數
- Attributes的細節
- 預定義的 NgModelController
- 預定義的 FormController
- 示例:文本框
- 示例:模板控制語句 for
- 示例:模板控制語句 if/else