Angular1.x 사용자 정의 명령 인 스 턴 스 상세 설명
Module.directive 방법 을 호출 하여 명령 이름과 공장 함 수 를 입력 하고 대상 을 되 돌려 줍 니 다.
명령 이름 에 있 는 모든 대문자 들 은 속성 명 에 있 는 독립 된 단어 로 여 겨 지고 모든 단어 들 은 하나의 연결 문자 로 구 분 됩 니 다.
var myApp = angular.module('myApp', [])
.directive("unorderedList", function () {
return function(scope, element, attrs) {
};
});
반환 체인 함수
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>AngularJS Demo</title>
<link rel="stylesheet" href="../css/bootstrap.css" rel="external nofollow" />
<link rel="stylesheet" href="../css/bootstrap-theme.css" rel="external nofollow" >
<script src="../js/angular.js"></script>
</head>
<body ng-app="myApp" ng-controller="myCtrl">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Products</h3>
</div>
<div class="panel-body">
<div unordered-list="products"></div>
</div>
</div>
</body>
<script>
var myApp = angular.module('myApp', [])
.controller('myCtrl', ["$scope", function ($scope) {
$scope.products = [
{ name: "Apples", category: "Fruit", price: 1.20, expiry: 10 },
{ name: "Bananas", category: "Fruit", price: 2.42, expiry: 7 },
{ name: "Pears", category: "Fruit", price: 2.02, expiry: 6 }
];
}])
.directive("unorderedList", function () {
return function (scope, element, attrs) {
var data = scope[attrs['unorderedList']];
if( angular.isArray(data) ){
for(var i=0, len=data.length; i<len; i++){
console.log(data[i].name);
}
}
};
});
</script>
</html>
데이터 속성 에 대한 의존 을 깨뜨리다연산 에 참가 해 야 할 키 를 동적 으로 설정 하 는 요소 속성 을 설정 합 니 다.속성 명 이 data-를 접두사 로 한다 면 AngularJS 는 연결 함수 에 전 달 된 속성 집합 을 생 성 할 때 이 접 두 사 를 제거 합 니 다.즉,data-list-property 와 list-property 는 모두 list Property 로 표시 된다.
<div unordered-list="products" list-property="name"></div>
var data = scope[attrs['unorderedList']];
var propertyName = attrs['listProperty'];
if(angular.isArray(data)){
var listElem = angular.element("<ul>");
element.append(listElem);
for(var i=0, len=data.length; i<len; i++){
listElem.append( angular.element('<li>').text(data[i][propertyName]) );
}
}
계산 식
<div unordered-list="products" list-property="price | currency"></div>
필 터 를 추가 한 후 사용자 정의 명령 이 파괴 되 었 습 니 다.역할 영역 에서 속성 값 을 표현 식 으로 계산 할 수 있 습 니 다.scope.$eval()은 두 개의 인 자 를 받 습 니 다.계산 할 표현 식 과 이 계산 을 실행 할 임의의 로 컬 데 이 터 를 받 아야 합 니 다.
listElem.append( angular.element('<li>').text(scope.$eval(propertyName, data[i])) );
처리 데이터 변화
<div class="panel-body">
<button class="btn btn-primary" ng-click="incrementPrices()">
Change Prices
</button>
</div>
$scope.incrementPrices = function () {
for(var i=0,len = $scope.products.length; i<len; i++){
$scope.products[i].price++;
}
}
모니터 추가
if(angular.isArray(data)){
var listElem = angular.element("<ul>");
element.append(listElem);
for(var i=0, len=data.length; i<len; i++){
var itemElem = angular.element('<li>');
listElem.append(itemElem);
var watchFn = function (watchScope) {
return watchScope.$eval(propertyName, data[i]);
};
scope.$watch(watchFn, function (newValue, oldValue) {
itemElem.text(newValue);
});
}
}
첫 번 째 함수(감청 기 함수)는 역할 영역 에 있 는 데 이 터 를 바탕 으로 값 을 계산 합 니 다.이 함 수 는 역할 영역 이 변 할 때마다 호출 됩 니 다.이 함수 의 반환 값 이 바 뀌 면 처리 함수 가 호출 됩 니 다.이 과정 은 문자열 표현 식 과 같 습 니 다.표현 식 에 필터 가 있 을 수 있 는 데 이 터 를 여 유 롭 게 감청 할 수 있 는 함 수 를 제공 합 니 다.두 번 째 감청 기 함 수 는
$eval()
계 산 된 표현 변화 에 맞추어 리 셋 함 수 를 집행 한다.이상 의 코드 는 정확하게 표시 되 지 않 습 니 다.for 순환 폐쇄 문제 와 관련 되 어 있 습 니 다.
for(var i=0, len=data.length; i<len; i++){
(function () {
var itemElem = angular.element('<li>');
listElem.append(itemElem);
var index = i;
var watchFn = function (watchScope) {
return watchScope.$eval(propertyName, data[index]);
};
scope.$watch(watchFn, function (newValue, oldValue) {
itemElem.text(newValue);
});
}());
}
혹은
(function (i) {
var itemElem = angular.element('<li>');
listElem.append(itemElem);
var watchFn = function (watchScope) {
return watchScope.$eval(propertyName, data[i]);
};
scope.$watch(watchFn, function (newValue, oldValue) {
itemElem.text(newValue);
});
})(i);
jqLitejqLite 에서
element()
,append()
등의 방법의 매개 변 수 는 HTML string or DOMElement 이다.
return function (scope, element, attrs) {
var listElem = element.append("<ol>");
for (var i = 0; i < scope.names.length; i++) {
listElem.append("<li>").append("<span>").text(scope.names[i]);
}
}
위 에 추 가 된 것 은 문자열 입 니 다.마지막 으로 scope.names 의 마지막 정보 만 추가 합 니 다.
return function (scope, element, attrs) {
var listElem = angular.element("<ol>");
element.append(listElem);
for (var i = 0; i < scope.names.length; i++) {
listElem.append(angular.element("<li>")
.append(angular.element("<span>").text(scope.names[i])));
}
}
AngularJS 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.AngularJS 명령 조작 기법 총화,AngularJS 입문 및 진급 강좌과AngularJS MVC 구조 총화본 고 에서 말 한 것 이 여러분 의 AngularJS 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
연말이므로 웹 앱을 만들었습니다.minmax 패널을 번갈아 가서 총 득점을 겨루는 게임이다. 선수는 좋아하는 위치에서 시작된다. 후손은 선수가 선택한 위치를 포함한 세로 일렬 중에서 패널을 선택한다. 다시 선수는 후손이 선택한 패널을 포함한 가로 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.