AngularJS1.x 입문·상용 지령 및 사용자 정의 지령
32934 단어 angularjs1.x
일반 명령
<body ng-app="main">
<div ng-controller="indexController">
10, <input ng-model="num" ng-change="changeHello()" />, <input ng-model="total" />
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.total=$scope.num*10;
$scope.num=1;
$scope.changeHello = function() {
$scope.total=10*$scope.num
};
}]);
script>
body>
-- CSS -->
.red{color:#DD1144;}
.blue{color:#0000FF}
ng-class의 표현식: 모델에서 showRed가true일 때 표시됩니다.red 스타일, showBlue가true일 때 표시됩니다.블루 스타일.단추를 누르면changeColor 함수를 터치하고true는false,false는true로 변환하여 css 스타일을 동적 전환합니다.
<body ng-app="main">
<div ng-controller="indexController">
<p ng-class="{'red':showRed,'blue':showBlue}"> p>
<button class="btn btn-primary" ng-click="changeColor()"> button>
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.showRed=true;
$scope.showBlue=false;
$scope.changeColor=function(){
$scope.showRed=!$scope.showRed;
$scope.showBlue=!$scope.showBlue;
};
}]);
script>
body>
<div ng-controller="indexController">
<p class="red" ng-show="showRed"> p>
<p class="blue" ng-hide="showRed"> p>
<button class="btn btn-primary" ng-click="changeColor()"> button>
div>
<body ng-app="main">
<div ng-controller="indexController">
<input type="text" ng-model="keyword" ng-keypress="search($event)" />
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.keyword="";
$scope.search=function($event){
if(13==$event.keyCode){
alert(" "+$scope.keyword+" ... ");
}
};
}]);
script>
body>
<body ng-app="main">
<div ng-controller="indexController">
<ul>
<li ng-repeat="item in books">
{{item}}
li>
ul>
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.books=['Java','Javascript','python','Mysql'];
}]);
script>
body>
사용자 지정 명령
먼저 몇 가지 가장 간단한 지령 예를 살펴보자.
예 1: 고정된 템플릿 컨텐츠 표시
<body ng-app="main">
<div ng-controller="indexController">
<span hello> span> <br />
<hello> hello> <br />
<span class="hello"> span><br />
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.directive('hello',function(){
return {
restrict:'ACEM',
template:'Hello Angular ... ',
replace:true,
transclude:false
};
});
script>
body>
해석: 1.directive 함수를 사용하여 hello라는 새 명령을 만듭니다.생성된 명령 이름이 낙타봉이면 주의하십시오.명령 app를 만듭니다.directive(‘helloWorld’,function(){ … });사용할 때는'-'로 연결해야 하는데,
<span hello-world>span>
app.directive('hello',function(){
return {
restrict:'ACEM',
template:'Hello Angular ... ',
replace:false,
transclude:true
};
});
네가 이렇게 사용할 때
<span hello> ng-transclude span>
페이지가 표시됩니다.
Hello Angular ... ng-transclude
예제 2: DOM 바인딩 이벤트
<body ng-app="main">
<div ng-controller="indexController">
<p ng-bind="count">p>
<button class="btn btn-primary" hello>countbutton>
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.count=1;
}]);
app.directive('hello',function(){
return {
restrict:'A',
link:function(scope,element,attrs){
element.on('click',function(){
scope.$apply(function(){
scope.count++;
});
});
}
};
});
script>
body>
scope에서count 속성을 초기화하고 값을 부여합니다 1,p 라벨은count,hello 지령:hello 지령이 있는 요소는click 이벤트를 바꿉니다.count가1을 한 번 클릭하면 됩니다.해석: 링크: 보통 링크 함수에서dom에 대한 동작을 봉인합니다.매개 변수: 1.scope: scope 역할 영역을 직접 가리키지 않았을 때, 이 scope는 controller의 scope를 공유합니다.2.element: 지표는 이 지령을 기억하고 angular에 의해 봉인된 요소로 기본적인 방법을 봉인하였으며 jQuery 봉인법과 차이가 많지 않다.3. attrs: 이 명령의 요소의 모든 속성이 봉인된 대상을 표시합니다.예를 들어 이 예에서 Hello 명령을 표시한 button은class 속성을 가지고 있으며attrs를 사용할 수 있다.class 속성의 값을 꺼냅니다.!!!구덩이를 주의하십시오. 이 곳의 속성 이름은 모두 소문자로 바뀔 것입니다. 만약 당신의 속성 이름에 대문자가 있다면 반드시 주의해야 합니다.4. 클릭 함수에서 호출됨
scope.$apply(function(){ … })
만약 우리가 이 바깥쪽의 소포를 제거하면 클릭 함수에 직접 쓴다
scope.count++
.페이지의count값은 변하지 않았지만 브라우저 debug js에서 scope의 값이 사실은 바뀌었고 페이지가 응답하지 않았을 뿐입니다.만약에 우리 스스로angular의 양방향 데이터 연결을 실현한다면 적어도 두 걸음은 있어야 한다.데이터 모델과 보기의 변화를 감청하다.2. 보기 데이터가 변할 때 모델에 업데이트 모델 데이터를 알려주고 모델 데이터가 변할 때 보기에 보기 내용을 업데이트하라고 알려준다.$apply()
는 바로 이 통지의 일을 한 것이다. 구체적인 실현 원리는 다음에 우리가 다시 연구한 결과 그의 참여는 하나의 함수이다.어떤 상황에서 이것$apply()
을 호출해야 합니까?대부분의 경우 수동으로 호출할 필요가 없다. angular가 자체로 가지고 있는 명령, 예를 들어ng-click,angular에 내장된 서비스$http() ``$timeout()
를 사용할 때angular는 이미 우리에게 이 함수를 호출했다. 우리가 사용할 때 호출할 필요가 없고 수동으로 호출하면 오히려 오류가 발생할 수 있다.상기 예에서 우리는angular의 지령이나 서비스를 사용하지 않고 일반적인 이벤트 감청을 사용하기 때문에$apply()
수동으로 호출해야 한다.예 3: 명령 독립 scope
<body ng-app="main">
<div ng-controller="indexController">
<p>{{username}}p>
<p hello>
{{username}}
p>
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
}]);
app.directive('hello',function(){
return {
scope:true, /* scope:{} scope*/
restrict:'A',
controller:function($scope){
$scope.username='Mike';
}
};
});
script>
body>
또는 Hello 명령은 사용자 정의 명령에서 되돌아오는 대상에 ===scope:true=를 설정하여 명령을 설명하는 scope가 개인임을 표시하고 명령에 독립된 컨트롤러를 만듭니다. 개인 scope에 값을 부여하는username 속성은 Mike이고 페이지에서 Hello 명령에서username를 가져오는 것은 얻을 수 있지만 Hello 명령에서 가져오는username는 값은 없습니다.
예4: 독립된 scope의 데이터를 외부 컨트롤러에 연결하도록 명령하는 scope 정책
'@'+ {}} 정책::문자열 전달, 데이터 단방향 귀속, 명령 외부 scope의 모델 데이터를 수정할 때 명령 내부 귀속의 모델 값은 바뀌지만 명령 내부의 모델 값을 수정할 때 외부 값은 바뀌지 않습니다.
<body ng-app="main">
<div ng-controller="indexController">
<p>{{username}}p>
indexController scope <input type="text" ng-model="username" />
<p hello name="{{username}}">
scope: {{name}}
p>
div>
<script type="text/javascript" src="../js/jquery1.12.4.min.js">script>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.username="Lily";
}]);
app.directive('hello',function(){
return {
scope:{
name:'@'
},
restrict:'A',
relplace:true,
template:' scope :{{name}}
',
link:function(scope,ele,attrs){
$(ele).find("button").on("click",function(){
scope.$apply(function(){
scope.name="Mike";
});
});
}
};
});
script>
body>
이 예에는 jQuery가 도입되었다.해석: index Controller의 scope에 있는username의 값을 사용자 정의 명령 Hello에 전달합니다. input 상자는 index Controller의 scope에 연결된 모델입니다. 명령 템플릿에 있는button에 클릭 이벤트를 추가하고 단추를 눌렀을 때 개인 scope에 있는name의 값을 변경합니다.실행 결과: input 상자에서 명령을 바꾸면 모든 scope의 값도 변화에 응답합니다. @ 귀속 정책은 모델의 값을 명령에 전달하고 문자열을 전달하는 것입니다.그러나 우리가 단추를 눌러서 개인 scope의name 값을 바꿀 때 index Controller의scope는 이러한 변화에 응답하지 않습니다
'='정책: 모델 객체 전달
...
scope:{
name:'@'
...
}
...
...
<p hello name="username">
...
해석:'='귀속 정책은 대상의 운행 결과를 전달한다. 두 scope에서 모델의 값은 양방향으로 귀속되어 있으며 어느 것을 바꾸면 다른 것도 이러한 변화에 응답한다.
'&' 정책: 함수 전달, 명령 호출
<body ng-app="main">
<div ng-controller="indexController">
<p hello say="sayEnglish()">p>
div>
<script type="text/javascript" src="../js/angular-1.6.4/angular.min.js">script>
<script type="text/javascript">
var app = angular.module("main", []);
app.controller("indexController", ['$scope', function($scope) {
$scope.sayEnglish=function(){
alert('Good Morning!');
};
}]);
app.directive('hello',function(){
return {
scope:{
say:'&'
},
restrict:'A',
relplace:true,
template:''
};
});
script>
body>
해석: 외부 index Controller의 scope에서say Englisg () 방법을 명령에 전달하고 명령 내부에서say () 방법을 호출할 때 실제는say English () 를 호출한다.