AngularJS 튜토리얼
AngularJS 시작하기
수색…
비고
AngularJS는 풍부한 클라이언트 측 응용 프로그램 개발을 단순화하도록 설계된 웹 응용 프로그램 프레임 워크입니다. 이 설명서는보다 최신의 Angular 2 의 전신 인 Angular 1.x 또는 Angular 2 의 Stack Overflow 설명서를 참조하십시오.
버전
번역 | 출시일 |
---|---|
1.6.5 | 2017-07-03 |
1.6.4 | 2017-03-31 |
1.6.3 | 2017-03-08 |
1.6.2 | 2017-02-07 |
1.5.11 | 2017-01-13 |
1.6.1 | 2016-12-23 |
1.5.10 | 2016-12-15 |
1.6.0 | 2016-12-08 |
1.6.0-rc.2 | 2016-11-24 |
1.5.9 | 2016-11-24 |
1.6.0-rc.1 | 2016-11-21 |
1.6.0-rc.0 | 2016-10-26 |
1.2.32 | 2016-10-11 |
1.4.13 | 2016-10-10 |
1.2.31 | 2016-10-10 |
1.5.8 | 2016-07-22 |
1.2.30 | 2016-07-21 |
1.5.7 | 2016-06-15 |
1.4.12 | 2016-06-15 |
1.5.6 | 2016-05-27 |
1.4.11 | 2016-05-27 |
1.5.5 | 2016-04-18 |
1.5.4 | 2016-04-14 |
1.5.3 | 2016-03-25 |
1.5.2 | 2016-03-19 |
1.4.10 | 2016-03-16 |
1.5.1 | 2016-03-16 |
1.5.0 | 2016-02-05 |
1.5.0-rc.2 | 2016-01-28 |
1.4.9 | 2016-01-21 |
1.5.0-rc.1 | 2016-01-16 |
1.5.0-rc.0 | 2015-12-09 |
1.4.8 | 2015-11-20 |
1.5.0-beta.2 | 2015-11-18 |
1.4.7 | 2015-09-30 |
1.3.20 | 2015-09-30 |
1.2.29 | 2015-09-30 |
1.5.0-beta.1 | 2015-09-30 |
1.5.0-beta.0 | 2015-09-17 |
1.4.6 | 2015-09-17 |
1.3.19 | 2015-09-17 |
1.4.5 | 2015-08-28 |
1.3.18 | 2015-08-19 |
1.4.4 | 2015-08-13 |
1.4.3 | 2015-07-15 |
1.3.17 | 2015-07-07 |
1.4.2 | 2015-07-07 |
1.4.1 | 2015-06-16 |
1.3.16 | 2015-06-06 |
1.4.0 | 2015-05-27 |
1.4.0-rc.2 | 2015-05-12 |
1.4.0-rc.1 | 2015-04-24 |
1.4.0-rc.0 | 2015-04-10 |
1.3.15 | 2015-03-17 |
1.4.0-beta.6 | 2015-03-17 |
1.4.0-beta.5 | 2015-02-24 |
1.3.14 | 2015-02-24 |
1.4.0-beta.4 | 2015-02-09 |
1.3.13 | 2015-02-09 |
1.3.12 | 2015-02-03 |
1.4.0-beta.3 | 2015-02-03 |
1.3.11 | 2015-01-27 |
1.4.0-beta.2 | 2015-01-27 |
1.4.0-beta.1 | 2015-01-20 |
1.3.10 | 2015-01-20 |
1.3.9 | 2015-01-15 |
1.4.0-beta.0 | 2015-01-14 |
1.3.8 | 2014-12-19 |
1.2.28 | 2014-12-16 |
1.3.7 | 2014-12-15 |
1.3.6 | 2014-12-09 |
1.3.5 | 2014-12-02 |
1.3.4 | 2014-11-25 |
1.2.27 | 2014-11-21 |
1.3.3 | 2014-11-18 |
1.3.2 | 2014-11-07 |
1.3.1 | 2014-10-31 |
1.3.0 | 2014-10-14 |
1.3.0-rc.5 | 2014-10-09 |
1.2.26 | 2014-10-03 |
1.3.0-rc.4 | 2014-10-02 |
1.3.0-rc.3 | 2014-09-24 |
1.2.25 | 2014-09-17 |
1.3.0-rc.2 | 2014-09-17 |
1.2.24 | 2014-09-10 |
1.3.0-rc.1 | 2014-09-10 |
1.3.0-rc.0 | 2014-08-30 |
1.2.23 | 2014-08-23 |
1.3.0-beta.19 | 2014-08-23 |
1.2.22 | 2014-08-12 |
1.3.0-beta.18 | 2014-08-12 |
1.2.21 | 2014-07-25 |
1.3.0-beta.17 | 2014-07-25 |
1.3.0-beta.16 | 2014-07-18 |
1.2.20 | 2014-07-11 |
1.3.0-beta.15 | 2014-07-11 |
1.2.19 | 2014-07-01 |
1.3.0-beta.14 | 2014-07-01 |
1.3.0-β.13 | 2014-06-16 |
1.3.0-β.12 | 2014-06-14 |
1.2.18 | 2014-06-14 |
1.3.0-beta.11 | 2014-06-06 |
1.2.17 | 2014-06-06 |
1.3.0-beta.10 | 2014-05-24 |
1.3.0-beta.9 | 2014-05-17 |
1.3.0-beta.8 | 2014-05-09 |
1.3.0-beta.7 | 2014-04-26 |
1.3.0-beta.6 | 2014-04-22 |
1.2.16 | 2014-04-04 |
1.3.0-beta.5 | 2014-04-04 |
1.3.0-beta.4 | 2014-03-28 |
1.2.15 | 2014-03-22 |
1.3.0-beta.3 | 2014-03-21 |
1.3.0-beta.2 | 2014-03-15 |
1.3.0-beta.1 | 2014-03-08 |
1.2.14 | 2014-03-01 |
1.2.13 | 2014-02-15 |
1.2.12 | 2014-02-08 |
1.2.11 | 2014-02-03 |
1.2.10 | 2014-01-25 |
1.2.9 | 2014-01-15 |
1.2.8 | 2014-01-10 |
1.2.7 | 2014-01-03 |
1.2.6 | 2013-12-20 |
1.2.5 | 2013-12-13 |
1.2.4 | 2013-12-06 |
1.2.3 | 2013-11-27 |
1.2.2 | 2013-11-22 |
1.2.1 | 2013-11-15 |
1.2.0 | 2013-11-08 |
1.2.0-rc.3 | 2013-10-14 |
1.2.0-rc.2 | 2013-09-04 |
1.0.8 | 2013 년 8 월 22 일 |
1.2.0rc1 | 2013 년 8 월 13 일 |
1.0.7 | 2013-05-22 |
1.1.5 | 2013-05-22 |
1.0.6 | 2013-04-04 |
1.1.4 | 2013-04-04 |
1.0.5 | 2013-02-20 |
1.1.3 | 2013-02-20 |
1.0.4 | 2013-01-23 |
1.1.2 | 2013-01-23 |
1.1.1 | 2012-11-27 |
1.0.3 | 2012-11-27 |
1.1.0 | 2012-09-04 |
1.0.2 | 2012-09-04 |
1.0.1 | 2012-06-25 |
1.0.0 | 2012-06-14 |
v1.0.0rc12 | 2012-06-12 |
v1.0.0rc11 | 2012-06-11 |
v1.0.0rc10 | 2012-05-24 |
v1.0.0rc9 | 2012-05-15 |
v1.0.0rc8 | 2012-05-07 |
v1.0.0rc7 | 2012-05-01 |
v1.0.0rc6 | 2012-04-21 |
v1.0.0rc5 | 2012-04-12 |
v1.0.0rc4 | 2012-04-05 |
v1.0.0rc3 | 2012-03-30 |
v1.0.0rc2 | 2012-03-21 |
g3-v1.0.0rc1 | 2012-03-14 |
g3-v1.0.0-rc2 | 2012-03-16 |
1.0.0rc1 | 2012-03-14 |
0.10.6 | 2012 년 1 월 17 일 |
0.10.5 | 2011-11-08 |
0.10.4 | 2011-10-23 |
0.10.3 | 2011-10-14 |
0.10.2 | 2011-10-08 |
0.10.1 | 2011-09-09 |
0.10.0 | 2011-09-02 |
0.9.19 | 2011 년 8 월 21 일 |
0.9.18 | 2011 년 7 월 30 일 |
0.9.17 | 2011-06-30 |
0.9.16 | 2011-06-08 |
0.9.15 | 2011-04-12 |
0.9.14 | 2011-04-01 |
0.9.13 | 2011-03-14 |
0.9.12 | 2011-03-04 |
0.9.11 | 2011-02-09 |
0.9.10 | 2011 년 1 월 27 일 |
0.9.9 | 2011-01-14 |
0.9.7 | 2010-12-11 |
0.9.6 | 2010-12-07 |
0.9.5 | 2010-11-25 |
0.9.4 | 2010-11-19 |
0.9.3 | 2010-11-11 |
0.9.2 | 2010-11-03 |
0.9.1 | 2010-10-27 |
0.9.0 | 2010-10-21 |
시작하기
새 HTML 파일을 만들고 다음 내용을 붙여 넣습니다.
<!DOCTYPE html>
<html ng-app>
<head>
<title>Hello, Angular</title>
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
</head>
<body ng-init="name='World'">
<label>Name</label>
<input ng-model="name" />
<span>Hello, {{ name }}!</span>
<p ng-bind="name"></p>
</body>
</html>
브라우저로 파일을 열면 입력 필드와 Hello, World!
텍스트가 표시됩니다 Hello, World!
. 입력 값을 편집하면 전체 페이지를 새로 고칠 필요없이 실시간으로 텍스트가 업데이트됩니다.
설명:
콘텐츠 전달 네트워크에서 각도 프레임 워크를로드하십시오.
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
ng-app
지시문을 사용하여 HTML 문서를 Angular 응용 프로그램으로 정의합니다.<html ng-app>
ng-init
사용하여name
변수를 초기화하십시오.<body ng-init=" name = 'World' ">
ng-init은 시범 및 테스트 목적으로 만 사용해야합니다. 실제 응용 프로그램을 빌드 할 때 컨트롤러는 데이터를 초기화해야합니다.
모델의 데이터를 HTML 컨트롤의 뷰에 바인딩합니다.
ng-model
을 사용하여name
속성에<input>
을 바인딩합니다.<input ng-model="name" />
이중 중괄호
{{ }}
사용하여 모델의 콘텐츠 표시<span>Hello, {{ name }}</span>
name
속성을 바인딩하는 또 다른 방법은 handlebars"{{ }}"
대신ng-bind
사용ng-bind
것입니다.<span ng-bind="name"></span>
마지막 세 단계는 양방향 데이터 바인딩을 설정 합니다. 입력에 대한 변경 사항은 모델 에 반영되며 뷰에 반영됩니다.
핸들바와 ng-bind
사용하는 것에는 차이가 있습니다. 핸들 막대를 사용하면 데이터가로드되기 전에 표현식이 해결되기 전에 페이지가로드 될 때 실제 Hello, {{name}}
가 표시 될 수 있습니다 ( Hello, {{name}}
반면 ng-bind
를 사용하면 이름이 표시 될 때만 데이터가 표시됩니다. 해결되었습니다. 대안으로 ng-cloak
명령을 사용하여 핸들 바가 컴파일되기 전에 표시되지 않도록 할 수 있습니다.
모든 일반적인 앵귤러 구조를 보여줍니다.
다음 예제는 하나의 파일에서 일반적인 AngularJS 구문을 보여줍니다.
<!DOCTYPE html>
<html ng-app="myDemoApp">
<head>
<style>.started { background: gold; }</style>
<script src="https://code.angularjs.org/1.5.8/angular.min.js"></script>
<script>
function MyDataService() {
return {
getWorlds: function getWorlds() {
return ["this world", "another world"];
}
};
}
function DemoController(worldsService) {
var vm = this;
vm.messages = worldsService.getWorlds().map(function(w) {
return "Hello, " + w + "!";
});
}
function startup($rootScope, $window) {
$window.alert("Hello, user! Loading worlds...");
$rootScope.hasStarted = true;
}
angular.module("myDemoApp", [/* module dependencies go here */])
.service("worldsService", [MyDataService])
.controller("demoController", ["worldsService", DemoController])
.config(function() {
console.log('configuring application');
})
.run(["$rootScope", "$window", startup]);
</script>
</head>
<body ng-class="{ 'started': hasStarted }" ng-cloak>
<div ng-controller="demoController as vm">
<ul>
<li ng-repeat="msg in vm.messages">{{ msg }}</li>
</ul>
</div>
</body>
</html>
파일의 모든 행은 아래에 설명되어 있습니다.
-
ng-app="myDemoApp"
, 응용 프로그램을 부트 스트랩하고 DOM 요소가"myDemoApp"
라는 특정angular.module
제어된다는 것을 알리는 ngApp 지시문 입니다. -
<script src="angular.min.js">
는 AngularJS 라이브러리 를 부트 스트랩하는 첫 번째 단계입니다.
아래에 사용 및 설명되는 세 가지 함수 ( MyDataService
, DemoController
및 startup
)가 선언됩니다.
배열과 함께 두 번째 인수로 사용 된
angular.module(...)
은 새 모듈을 만듭니다. 이 배열은 모듈 종속성 목록을 제공하는 데 사용됩니다. 이 예제에서 우리는module(...)
함수의 결과를 호출합니다..service(...)
는 각도 서비스를 만들고 연결을위한 모듈을 반환합니다..controller(...)
는 각도 조절기를 만들고 연결을위한 모듈을 반환합니다..config(...)
이 메소드를 사용하여 모듈로드시 수행해야하는 작업을 등록하십시오..run(...)
은 시작시 코드가 실행되고 항목 배열을 매개 변수로 취합니다. 인젝터가 모든 모듈을로드 할 때 수행해야하는 작업을 등록하려면이 방법을 사용하십시오.- 첫 번째 항목은 Angular가
startup
기능이 내장 된$rootScope
서비스 가 인수로 주입되어야 함을$rootScope
있습니다. - 두 번째 항목은 Angular가
startup
함수가 내장 된$window
서비스 를 인수로 주입해야한다는 것을 알려주고 있습니다. - 배열의 마지막 항목 인
startup
은 시작시 실행할 실제 함수입니다.
- 첫 번째 항목은 Angular가
ng-class
는 동적class
를 설정하는 ngClass 지정 문hasStarted
예제에서는$rootScope
동적으로hasStarted
를 사용합니다ng-cloak
는 Angular가 응용 프로그램을 완전히로드하기 전에 렌더링되지 않은 Angular html 템플릿 (예 : "{{ msg }}
")이 잠깐 표시된 것을 방지하기 위한 지침 입니다.ng-controller
는 Angular에게 특정 이름의 새 컨트롤러를 인스턴스화하여 DOM의 해당 부분을 조율하는 지시문 입니다.ng-repeat
는 컬렉션에서 Angular를 반복하고 각 항목에 대해 DOM 템플리트를 복제하는 지시어 입니다.{{ msg }}
보간법 : 스코프 또는 컨트롤러의 일부를 현장에서 렌더링;
범위의 중요성
Angular는 HTML을 사용하여 웹 페이지와 일반 Javascript를 확장하여 논리를 추가하므로 ng-app , ng-controller 및 ng-if , ng-repeat 등과 같은 기본 제공 지시문을 사용하여 웹 페이지를 쉽게 만들 수 있습니다. new controllerAs 구문을 사용하여 Angular 사용자를 처음 접하는 사용자는 $scope
를 사용하는 대신 함수와 데이터를 컨트롤러에 연결할 수 있습니다.
그러나 조만간이 $scope
무엇인지 정확히 이해하는 것이 중요합니다. 몇 가지 이해가 중요하므로 예제에 계속 나타납니다.
좋은 소식은 간단하면서도 강력한 개념이라는 것입니다.
다음을 만들 때 :
<div ng-app="myApp">
<h1>Hello {{ name }}</h1>
</div>
이름 은 어디에서 살고 있습니까?
대답은 Angular가 $rootScope
객체를 생성 $rootScope
것입니다. 이것은 단순히 일반 자바 스크립트 객체이므로 name 은 $rootScope
객체의 속성입니다.
angular.module("myApp", [])
.run(function($rootScope) {
$rootScope.name = "World!";
});
Javascript의 전역 범위와 마찬가지로 전역 범위 또는 $rootScope
항목을 추가하는 것이 일반적으로 좋지 않습니다.
물론 대부분의 경우 컨트롤러를 만들고 필요한 기능을 해당 컨트롤러에 넣습니다. 그러나 컨트롤러를 만들면 Angular가 마술을 일으키고 컨트롤러에 $scope
객체를 만듭니다. 이를 종종 " 로컬 범위 "라고합니다.
그래서, 다음 컨트롤러를 생성합니다 :
<div ng-app="myApp">
<div ng-controller="MyController">
<h1>Hello {{ name }}</h1>
</div>
</div>
$scope
매개 변수를 통해 로컬 범위에 액세스 할 수 있습니다.
angular.module("myApp", [])
.controller("MyController", function($scope) {
$scope.name = "Mr Local!";
});
$scope
매개 변수가없는 컨트롤러는 어떤 이유로 든 필요하지 않을 수 있습니다. 그러나 controllerAs 구문 을 사용하더라도 로컬 범위가 있음을 인식하는 것이 중요합니다.
$scope
는 JavaScript 객체이므로 Angular는 $rootScope
에서 프로토 타입 적으로 상속받을 수 있도록 마술처럼 설정합니다. 그리고 여러분이 상상할 수있는 것처럼, 일련의 범위가있을 수 있습니다. 예를 들어 상위 컨트롤러에서 모델을 만들고 상위 컨트롤러의 범위에 $scope.model
있습니다.
그런 다음 프로토 타입 체인을 통해 하위 컨트롤러는 $scope.model
하여 동일한 모델에 로컬로 액세스 할 수 있습니다.
처음에는 Angular가 백그라운드에서 마술을 수행하기 때문에 처음에는이 중 어느 것도 분명하지 않습니다. 그러나 $scope
이해하는 것은 Angular가 작동하는 방법을 알기위한 중요한 단계입니다.
가장 단순한 가능한 각도의 Hello World.
Angular 1은 DOM 컴파일러에 있습니다. 템플릿이나 일반 웹 페이지처럼 HTML을 전달한 다음 앱을 컴파일 할 수 있습니다.
{{ }}
핸들 바 스타일 구문을 사용하여 페이지의 영역을 표현식 으로 처리하도록 Angular에 알릴 수 있습니다. 중괄호 사이에는 다음과 같이 컴파일됩니다.
{{ 'Hello' + 'World' }}
그러면 다음과 같이 출력됩니다.
HelloWorld
응 용 - 앱
우리는 DOM의 어느 부분을 ng-app
지시어를 사용하여 마스터 템플릿으로 취급할지 Angular에게 알려줍니다. 지시어는 Angular 템플릿 컴파일러가 처리 방법을 알고있는 사용자 지정 특성 또는 요소입니다. 이제 ng-app 지시문을 추가해 보겠습니다.
<html>
<head>
<script src="/angular.js"></script>
</head>
<body ng-app>
{{ 'Hello' + 'World' }}
</body>
</html>
이제 본문 요소에 루트 템플릿이라고 말했습니다. 그 안에있는 것은 컴파일 될 것입니다.
지시문
지시문은 컴파일러 지시문입니다. Angular DOM 컴파일러의 기능을 확장합니다. 이것이 Angular의 작성자 인 Misko 가 Angular를 다음과 같이 설명하는 이유입니다.
"웹 응용 프로그램 용으로 만들어진 웹 브라우저 였을 것입니다.
문자 그대로 새로운 HTML 속성과 요소를 만들고 Angular에서이를 앱으로 컴파일합니다. ng-app
는 컴파일러를 켜는 지시어입니다. 기타 지시문은 다음과 같습니다.
-
ng-click
: 클릭 핸들러를 추가하고, - 조건부로 요소를
ng-hide
-
<form>
: 표준 HTML 양식 요소에 추가 동작을 추가합니다.
Angular에는 가장 일반적인 작업을 수행 할 수있는 내장 명령 약 100 개가 있습니다. 우리는 자체적으로 작성할 수도 있으며, 내장 된 지시문과 동일한 방식으로 처리됩니다.
HTML과 함께 연결된 일련의 지시문에서 Angular 앱을 만듭니다.
각도로 축소
Minification이란 무엇입니까?
이 기능은 기능을 변경하지 않고 소스 코드에서 불필요한 문자를 모두 제거하는 과정입니다.
일반 구문
컨트롤러를 작성하기 위해 일반적인 각도 구문을 사용하면 파일을 최소화 한 후 기능이 중단됩니다.
컨트롤러 (축소 전) :
var app = angular.module('mainApp', []);
app.controller('FirstController', function($scope) {
$scope.name= 'Hello World !';
});
minification tool을 사용한 후 다음과 같이 축소됩니다.
var app=angular.module("mainApp",[]);app.controller("FirstController",function(e){e.name= 'Hello World !'})
여기서 minification은 불필요한 공백과 $ scope 변수를 코드에서 제거했습니다. 그래서 우리는이 축소 된 코드를 사용할 때 아무 것도 보이지 않을 것입니다. $ scope는 컨트롤러와 뷰 사이에서 중요한 부분이므로 작은 'e'변수로 대체됩니다. 따라서 응용 프로그램을 실행할 때 알 수없는 공급자 'e'종속성 오류가 발생합니다.
분실 안전 인 서비스 이름 정보로 코드에 주석을 추가하는 두 가지 방법이 있습니다.
인라인 주석 구문
var app = angular.module('mainApp', []);
app.controller('FirstController', ['$scope', function($scope) {
$scope.message = 'Hello World !';
}]);
$ inject 속성 주석 구문
FirstController.$inject = ['$scope'];
var FirstController = function($scope) {
$scope.message = 'Hello World !';
}
var app = angular.module('mainApp', []);
app.controller('FirstController', FirstController);
축소 후이 코드는
var app=angular.module("mainApp",[]);app.controller("FirstController",["$scope",function(a){a.message="Hello World !"}]);
여기서 angle은 변수 'a'를 $ scope로 간주하고 'Hello World!'로 출력을 표시합니다.
AngularJS 시작 비디오 자습서
egghead.io 의 AngularJS 프레임 워크에 대한 유용한 비디오 자습서가 많이 있습니다.
- https://egghead.io/courses/angularjs-app-from-scratch-getting-started
- https://egghead.io/courses/angularjs-application-architecture
- https://egghead.io/courses/angular-material-introduction
- https://egghead.io/courses/building-an-angular-1-x-ionic-application
- https://egghead.io/courses/angular-and-webpack-for-modular-applications
- https://egghead.io/courses/angularjs-authentication-with-jwt
- https://egghead.io/courses/angularjs-data-modeling
- https://egghead.io/courses/angular-automation-with-gulp
- https://egghead.io/courses/learn-protractor-testing-for-angularjs
- https://egghead.io/courses/ionic-quickstart-for-windows
- https://egghead.io/courses/build-angular-1-x-apps-with-redux
- https://egghead.io/courses/using-angular-2-patterns-in-angular-1-x-apps