angularJS api reference : directive
April 23, 2014
ng
ng는 angularJS의 코어 모듈이다. 여기에는 함수, 디렉티브, 오브젝트, 필터 등등이 정의되어 있다. 이 중 ng로 시작하는 디렉티브들을 알아야 UI 핸들링할 때 유용할 것 같아서 어떤 것이 있는지 angularjs.org에 나와있는 api 레퍼런스를 살펴보았다. 문서에 나와있는 디렉티브 명칭은 lowerCamelCase를 사용하여 정의해놓았는데 템플릿에 사용할 때는 dash 스타일로 작성해야 한다.
ng-bind
모델을 바인딩 한다.
<div ng-controller="Ctrl">
<input type="text" ng-model="name"><br>
<span ng-bind="name"></span>
</div>
ng-bind-html
html을 바인딩 한다.
ng-blur
blur 이벤트 발생했을 때 행동 지정
ng-change
변화가 생겼을 때 함수를 호출한다.
<input type="checkbox" ng-model="confirmed" ng-change="change()" />
ng-class
- true, false에 따라서 클래스를 적용하거나 적용하지 않는다.
- ng-model을 이용하여 클래스를 변경한다.
<!-- { class : true || false } -->
<p ng-class="{strike: deleted, bold: important, red: error}"> ... </p>
<!-- [ ng-model names ] -->
<p ng-class="[style1, style2, style3]"> ... </p>
ng-class-odd, ng-class-even
홀수일 경우 붙이는 클래스, 짝수일 경우 붙이는 클래스를 다르게 할 수 있다.
<ol ng-init="names=['John', 'Mary', 'Cate', 'Suz']">
<li ng-repeat="name in names">
<span ng-class-odd="'odd'" ng-class-even="'even'">
</span>
</li>
</ol>
ng-click
클릭했을 때 지정 함수 호출, 이벤트 객체는 $event 사용
<button ng-click="share();"> ... </button>
ng-cloak
뭔지 모르겠음.
ng-controller
컨트롤러를 지정할 때 사용한다.
<div ng-controller="MainCtrl"> ... </div>
ng-copy, ng-cut, ng-paste
클립보드에 복사, 잘라내기, 붙이기 등의 이벤트를 감지하여 특정 작동을 수행할 수 있게 해준다.
<input ng-copy="copied=true" ng-init="copied=false; value='copy me'" ng-model="value">
copied:
<input ng-cut="cut=true" ng-init="cut=false; value='cut me'" ng-model="value">
cut:
<input ng-paste="paste=true" ng-init="paste=false" placeholder='paste here'>
pasted:
ng-dblclick
더블클릭 했을 때 행동 지정
<button ng-dblclick="count = count + 1" ng-init="count=0">
Increment (on double click)
</button>
count: 8
ng-disabled
조건에 따라서 버튼을 비활성화 시킨다.
<button ng-disabled="currentPage == 0" ng-click="currentPage=currentPage-1">
Previous
</button>
<button ng-disabled="currentPage >= numPages()-1" ng-click="currentPage=currentPage+1">
Next
</button>
ng-focus
포커스 이벤트가 발생했을 때 행동 지정
ng-hide, ng-show
true, false에 따라서 요소를 감추거나 보여줌. css display로 처리
<div ng-show="checked"> ... </div>
<div ng-hide="checked"> ... </div>
ng-href, ng-src, ng-srcset
href, src 혹은 srcset에 마크업을 쓸 때 필요
<a ng-href="/123">
<img ng-src="/123" />
</a>
ng-if
true, false에 따라서 DOM 트리에서 지우거나 추가
<span ng-if="checked"> ... </span>
ng-include
html을 인클루드 할 때 사용한다.
<ng-include src="template.url"><ng-include>
<!-- 혹은 -->
<div ng-include="template.url"></div>
ng-init
잘 와닿지 않음.
<script>
function Ctrl($scope) {
$scope.list = [['a', 'b'], ['c', 'd']];
}
</script>
<div ng-controller="Ctrl">
<div ng-repeat="innerList in list" ng-init="outerIndex = $index">
<div ng-repeat="value in innerList" ng-init="innerIndex = $index">
<span class="example-init">list[ ][ ] = ;</span>
</div>
</div>
</div>
ng-keydown, ng-keypress, ng-keyup
키보드 이벤트에 대해서 특정 행동을 하는 디렉티브
<input ng-keydown="count = count + 1" ng-init="count=0">
ng-list
배열을 구분된 문자열로 출력하거나 콤마로 배열을 만든다.
<input ng-model="names" ng-list />
ng-model
input, select, textarea에 쓰인다.
<input ng-model="val" />
ng-model-options
어떤 이벤트가 발생했을 때 모델을 업데이트 할 것인지 결정할 수 있다. 옵션은 updateOn, debounce 두 가지를 지원한다. debounce는 밀리세컨 단위로 입력하여 해당 시간이 지나면 이벤트가 발생할 수 있도록 도와준다.
<input ng-model="val" ngModelOptions="{ updateOn: 'default blur', debounce: {'default': 500, 'blur': 0} }" />
ng-mousedown, ng-mouseenter, ng-mouseleave, ng-mousemove, ng-mouseover, ng-mouseup
마우스 이벤트를 바인딩 할 때 사용한다.
<button ng-mousedown="count = count + 1" ng-init="count=0">
Increment (on mouse down)
</button>
ng-non-bindable
앵귤러가 아무것도 바인딩하지 못하도록 만든다.
ng-open
true, false 값에 따라서 details 태그의 엘리먼트들을 보여주거나 감춘다.
Check me check multiple: <input type="checkbox" ng-model="open"><br/>
<details id="details" ng-open="open">
<summary>Show/Hide me</summary>
</details>
ng-pluralize
페이스북의 좋아요를 생각하면 쉽다.
<ng-pluralize count="personCount" offset=2
when="{'0': 'Nobody is viewing.',
'1': ' is viewing.',
'2': ' and are viewing.',
'one': ', and one other person are viewing.',
'other': ', and {} other people are viewing.'}">
</ng-pluralize>
ng-readonly
true, false 값에 따라서 인풋박스를 편집 불가능한 상태로 만들어 준다.
Check me to make text readonly: <input type="checkbox" ng-model="checked"><br/>
<input type="text" ng-readonly="checked" value="I'm Angular"/>
ng-repeat
반복을 사용할 때 쓴다. 사용할 수 있는 변수로는 $index, $first, $middle, $last, $even, $odd가 있다.
<li ng-repeat="post in posts"> ... </li>
ng-selected
true, false 값에 따라서 option을 골라준다. option 태그에 사용된다.
Check me to select: <input type="checkbox" ng-model="selected"><br/>
<select>
<option>Hello!</option>
<option id="greet" ng-selected="selected">Greetings!</option>
</select>
ng-style
css 스타일을 태그에 적용할 때 사용한다.
<input type="button" value="set" ng-click="myStyle={color:'red'}">
<input type="button" value="clear" ng-click="myStyle={}">
<br/>
<span ng-style="myStyle">Sample Text</span>
<pre>myStyle=</pre>
ng-submit
form 태그에서 사용
<form ng-submit="post();"> ... </form>
ng-switch, ng-switch on, ng-switch-when
선택된 값에 따라서 엘리먼트를 보여주거나 감춘다.
<div ng-controller="Ctrl">
<select ng-model="selection" ng-options="item for item in items">
</select>
<tt>selection=</tt>
<hr/>
<div class="animate-switch-container"
ng-switch on="selection">
<div class="animate-switch" ng-switch-when="settings">Settings Div</div>
<div class="animate-switch" ng-switch-when="home">Home Span</div>
<div class="animate-switch" ng-switch-default>default</div>
</div>
</div>
ng-transclude
디렉티브와 가까운 부모 엘리먼트를 포함시킬 때 사용한다. 디렉티브에서는 transclude : true 를 설정해줘야 한다.
<script>
function Ctrl($scope) {
$scope.title = 'Lorem Ipsum';
$scope.text = 'Neque porro quisquam est qui dolorem ipsum quia dolor...';
}
angular.module('transclude', [])
.directive('pane', function(){
return {
restrict: 'E',
transclude: true,
scope: { title:'@' },
template: '<div style="border: 1px solid black;">' +
'<div style="background-color: gray"></div>' +
'<div ng-transclude></div>' +
'</div>'
};
});
</script>
<div ng-controller="Ctrl">
<input ng-model="title"><br>
<textarea ng-model="text"></textarea> <br/>
<pane title=""></pane>
</div>
ng-value
input 태그에 value를 설정할 수 있다.
<input type="radio"
ng-model="my.favorite"
ng-value="name"
id=""
name="favorite">
기타
a, form, input, script, select, textarea 태그에 대한 설명은 생략.