一、自定義指令:
1. 先創建模塊 var app=angular.module("myApp",[]);
2. 創建自定義指令 (directive后面的參數一:自定義指令的名稱,參數二:function 返回值是一個對象 template是模板)
app.directive("shen",function(){
return {
template:"<h1>這是自定義屬性</h1>"
}
})
3.划定模塊范圍,使用自定義指令
<body ng-app="myApp">
<shen></shen>
二、模板--引入外部文件
上面是模板最基本的使用方式,模板還可以引用外部文件,當模板的內容稍大一點的時候,引用外部文件更好
定義一個模板文件,最好是把作為模板的文件統一放在template文件夾下。模板文件不需要html、body等標簽,直接寫你需要的模板標簽即可
此時自定義指令中的template換成templateUrl,后面寫模板文件的相對路徑,其他不變
三、在script標簽中寫模板
新建一個script標簽,這個標簽必須有id,和type,id隨便取名字,type為固定寫法 type="text/ng-template"。
在這個script標簽中寫模板,寫法和一般標簽寫法一樣。
此時自定義指令中templateUrl對應的值為 script標簽的id名
四、自定義指令的不同實現方式
以上方法中自定義指令都是以標簽的形式實現的,其實自定義指令還可以用屬性和類名的形式實現
當以類名形式編寫時,還必須在定義指令時添加restrict屬性 (使用屬性和標簽的方式時不寫也可正常顯示)
restrict是“限制”的意思,屬性值可以為E(element),A(attribute),C(class),當你希望實現方式只能是標簽時,可以寫restrict:“E”,restrict:“EAC”表示三種方式都可以,以此類推。
五、自定義模板內容
上面的模板內容都是固定的,實際開發中模板的內容都是由項目需要而生成的,如何讓每一個模板的內容不一樣呢? 使用 transclude
1. 在模板中的標簽里添加 ng-transclude,(如果你需要某個標簽里的內容自定義就添加ng-transclude屬性,如果希望是固定的值就不需要加)
2. 添加屬性 transclude:true
2. 在實現自定義指令時,把自定義的內容寫在指令標簽的里面即可