'Angular.js'에 해당되는 글 8건

  1. 2014.09.17 Angular 사용자 정의 속성 1
  2. 2014.09.15 Angular 바인딩/ 팩토리
  3. 2014.09.15 angular example
  4. 2014.09.15 Angular 서비스
  5. 2014.09.15 Angular 페이지 라우트
  6. 2014.09.12 Angular ng 속성
  7. 2014.09.12 Angular 컨트롤러
  8. 2014.09.12 Angular 설정

Angular 사용자 정의 속성

Posted by 단순대왕 Angular.js : 2014. 9. 17. 15:37

Angular.js 라이브러리는 문자열 "ng"로 시작하는 속성으로 태그에 기능을 부여합니다.

일반 개발자도 특별한 속성을 만들어 태그에 기능을 부여할 수 있습니다.


var app = angular.module('custom', []);

// 사용자 정의 속성은 directive() 메서드로 만듭니다.

// 첫 번째 매개변수는 사용자 정의 속성 이름을 입력하고

// 두 번째 매개변수는 함수를 리턴하는 함수를 입력합니다.

app.directive('customTimer', function($http){

return function(scope, element, attrs){

}

});

<h1 custom-timer="model"></h1>

scope - 태그가 속한 컨트롤러의 $scope 속성을 의미

scope 속성을 알아보려면 컨트롤러를 만들어야 합니다.

예)

var app = angular.module('custom', []);

app.directive('customTimer', function($http){

return function(scope, element, attrs){

alert(JSON.stringify({

date: scope.date,

other.scope.other

}, null, 2));

};

});

function basicController($scope){

$scope.date = new Date().toString();

$scope.other = 'OtherData';

}

<body ng-controller="basicController">

<h1 custom-timer="model" custom-data="CustomData" data-other="OtherData"></h1>

</body>


$destroy() - 태그가 삭제될 때 발생하는 이벤트
예)
element.bind('$destroy', function(){
clearInterval(timerId);
});

$watch() - 변수를 감시할 때 사용합니다.
첫 번째 매개변수에 변수 이름을 넣고
두 번째 매개변수에 변경될 때 실행할 함수를 입력합니다.
예)
app.directive('cutomTimer', function($http){
return function(scope, element, attrs){
scope.$watch('other', function(newValue, oldValue){
element.html(newValue);
});
};
});

element - 태그 자체를 의미

element는 사용자 정의 속성을 지정한 태그를 나타냅니다.

자바스크립트에서 기본적으로 제공하는 문서 객체가 아닙니다.

element 메서드()

addClass(), after(), append(), attr(), bind(), children(), clone(), contents(), css(), data(), 

eq(), find(), hasClass(), html(), next(), parent(), prepend(), prop(), 

ready() - 문서 객체에 ready 이벤트를 연결합니다.

remove(), removeAttr(), removeClass(), removeData(), replaceWith(), text(), toggleClass(),

triggerHandler() - 문서 객체에 특정한 이벤트를 강제로 발생시킵니다.

unbind(), val(), 

wrap() - 문서 객체를 감싸는 문서 객체를 생성합니다.

예)

app.directive('customTimer, function($http){

return function(scope, element, attrs){

element.html(new Data().toString());

element.bind('click', function(){

element.html(new Data().toString());

});

};

});

function basicController($scope, $timout){

// $timeout(fn, [delay], [invokeApply]);

$scope.date = new Date().toString();

$scope.other = 'OtherData';

$timeout(call = function(){

$timeout(call , 1000);

}, 1000);

}


attrs - 태그의 속성을 의미

attrs 객체는 현재 태그의 속성을 담은 객체입니다.
예)
<h1 custom-timer="model" custom-data="CustomData" data-other="OtherData"></h1>
return function(scope, element, attrs){
alert(attrs.customTimer);    // model
alert(attr.customData);      // CustomData
alert(attr.other);                // OtherData
}


'Angular.js' 카테고리의 다른 글

Angular 바인딩/ 팩토리  (0) 2014.09.15
angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
  

Angular 바인딩/ 팩토리

Posted by 단순대왕 Angular.js : 2014. 9. 15. 18:00

Angular.js 라이브러리는 특별한 일이 있을 때만 데이터와 뷰를 바인딩합니다.

예를 들어 속성으로 연결한 이벤트를 실행하거나 $http 서비스를 만드는데 데이터와 뷰를 바인딩합니다.


강제로 바인딩하고 싶다면 $scope 객체의 $apply() 메서드를 사용합니다.

예)

setInterval(function(){ 

$scope.title += "+";

$scope.$apply();

}, 1000);


팩토리

Angular.js 라이브러리는 팩토리 기능을 사용해 개발자가 직접 서비스를 만들 수 있습니다.

서비스를 만들어 사용하면 코드를 모듈로 분리해서 사용하므로 재사용성이 좋아지고 본문 코드가 

간단해집니다.

<html ng-app="basic">

<script>

// 모듈을 생성합니다.

var basic_module = angular.module('basic', []);

// 서비스를 생성합니다.

/*

basic 모듈을 여기서 생성한다. 

-> 컨트롤러는 모듈에 포함된다. 

-> 컨트롤러에서는 생성된 서비스를 사용한다.

*/

basic_module.factory('$custom', function ($rootScope) {

// 클로저로 은닉 변수를 만듭니다.

var timerId = null;

// 리턴합니다.

return {

startTimer: function (callback, interval) {

timerId = setInterval(function () {

callback();

$rootScope.$apply();

}, interval);

},

stopTimer: function () {

clearInterval(timerId);

timerId = null;

}

};

});

</script>

<script>

basic_module= angule.module(); -> 모듈을 여기서 생성하면 서비스(Factory)를 생성하지 못한다.

// 컨트롤러를 생성합니다.

basic_module.controller('basicController', function ($scope, $custom) {

// 변수를 입력합니다.   

$scope.title = 'Factory';

// 타이머를 연결합니다.

$custom.startTimer(function () {

$scope.title += '+';

}, 1000);

});

</script>

<div ng-controller="basicController">

<h1>{{ title }}</h1>

</div>

'Angular.js' 카테고리의 다른 글

Angular 사용자 정의 속성  (1) 2014.09.17
angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
  

angular example

Posted by 단순대왕 Angular.js : 2014. 9. 15. 16:49

index.html 

<script>

        app = angular.module('todo', [], function ($routeProvider) {

            $routeProvider.when('/main', {

                templateUrl: 'main.html',

                controller: function ($scope, $http) {

                    $http.get('/users/me').success(function (data) {

                        $http.get('/todos').success(function (data) {

// json type 데이터 파일 

$http makes an HTTP GET request to our web server, asking for .json. The server responds by providing the data in the json file. (The response might just as well have been dynamically generated by a backend server. To the browser and our app they both look the same. For the sake of simplicity we used a json file in this tutorial.)

                            $scope.todos = data;

                        });

                        $scope.logout = function () {

                            $http.get('/users/logout').success(function (data) {

                                location.hash = '/login'

                            });

                        };

                        $scope.add = function () {

                            $http.post('/todos', {

                                title: $scope.title

                            }).success(function (data) {

                                $scope.todos.push(data[0]);

                                $scope.title = '';

                            });

                        };

                        $scope.checkChange = function (self) {

                            $http.put('/todos/' + self._id, {

                                completed: self.completed

                            });

                        };

                        $scope.remove = function () {

                            for (var i = $scope.todos.length - 1; i >= 0; i--) {

                                if ($scope.todos[i].completed) {

                                    (function (i) {

                                        var url = '/todos/' + $scope.todos[i]._id;

                                        $http.delete(url).success(function () {

                                            $scope.todos.splice(i, 1);

                                        });

                                    })(i);

                                }

                            }

                        };

                        $scope.opacity = function (todo) {

                            return todo.completed ? { opacity: 0.2 } : {};

                        };

                    }).error(function () {

                        location.hash = '/login'              

                    });

                }

            });

});

<script>


main.html

routeProvier > templateUrl > 사용하는 html 파일에서 controller 지정없이 사용

<div>

    <a ng-click="logout()">Logout</a>

    <h1>Todos</h1>

    <ul>

        <li ng-repeat="todo in todos" ng-style="opacity(todo)">

            <label>

                <input type="checkbox"

                       ng-model="todo.completed"

                       ng-change="checkChange(todo)" />

                <span>{{ todo.title }}</span>

            </label>

        </li>

    </ul>

    <form id="item-form">

        <input ng-model="title" type="text" />

        <button ng-click="add()">Add</button>

    </form>

    <p><a ng-click="remove()">Remove items</a></p>

</div>



'Angular.js' 카테고리의 다른 글

Angular 사용자 정의 속성  (1) 2014.09.17
Angular 바인딩/ 팩토리  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
  

Angular 서비스

Posted by 단순대왕 Angular.js : 2014. 9. 15. 15:08

서비스

Angular.js 라이브러리를 사용하면서 컨트롤러의 매개변수로 입력한 $http, $scope를 서비스라고 합니다.

서비스는 매개변수의 순서에 상관없이 컨트롤러의 매개변수로 입력합니다.

예)

function basicController($scope, $http,$controller, $parse, $window){

}


$anchorScroll

$cacheFactory

$compile

$controller

$document

$exceptionHandler

$filter

$http - get(), post(), put(), del(), jsonp()

예)

function basicController($scope, $http){

$http({

method: 'GET',

url: 'HTMLPage.html'

}).success(function(data, status){

console.log(data);

});

}

<div ng-controller="basicController"></div>

$httpBackend

$interpolate

$locale

$location

$log

$parse

$q

$rootElement

$rootScope

$route

$routeParams

$scope -  scope is an object that refers to the application model. It is an execution context

for expressions. Scopes are arranged in hierarchical structure which mimic the DOM

structure of the application. Scopes can watch expressions and propagate events.

[scope inheritance]

Root Scope > Controller Scope > Repeater Scope

$templateCache

$timeout

$window


'Angular.js' 카테고리의 다른 글

Angular 바인딩/ 팩토리  (0) 2014.09.15
angular example  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
Angular 컨트롤러  (0) 2014.09.12
  

Angular 페이지 라우트

Posted by 단순대왕 Angular.js : 2014. 9. 15. 14:34

Angular.js 라이브러리와 Knockout 라이브러리의 가장 큰 차이점은 라우터의 지원 유무입니다.


html 태그에 ng-app 속성 값을 부여합니다.

이 값은 생성하는 모듈의 이름과 같아야 합니다.

<html ng-app="basic"> // 모듈이름

<script>

var basic = angular.module('basic', [], function($routeProvider){

});


var products = [{}, {}, {} ... ];

</script>


라우터 설정

angular.module() 메서드의 세 번째 매개변수에 넣은 함수의 매개변수에 $routeProvier를 입력합니다.

when() - 특정 해시를 라우트합니다.

첫 번째 매개변수로 대상 URL을 지정

두 번째 매개변수로 템플릿 파일과 컨트롤러를 지정합니다.

otherwise() - when() 메서드로 지정하지 않은 해시를 라우트합니다.

redirectTo 속성이 있는 객체를 입력


예)

var basic = angular.module('basic', [], function($routeProvider){

$routeProvider.when('/products', {

templateUrl: 'products.html',

controller: ListController

});

$routeProvider.when('/products/:id', {

templateUrl: 'product.html',

controller: DetailController

});

$routeProvider.otherwise({

redirectTo: '/products'

});

});


뷰 설정

예) products.html

<ul>

<li ng-repeat="product in products">

<a href="#/products/{{product.id}}}>

<img src="{{product.src}}" />

</a>

<div>

<h4>{{product.name}}</h4>

<p>{{product.price.min}} ~ {{product.price.max}}</p>

<p>Description</p>

</div>

</li>

</ul>



HTMLPage.html

<body> 

<h1>{{title}}</h1>

<div ng-view></div>    // ng-view 속성 사용

</body>


컨트롤러 설정

<script>

function ListController($scope, $routeParams){

$scope.$parent.title = 'Product List';    // $parent 속성을 사용해 title 속성 지정

$scope.products = products;

}


function DetailController($scope, $routeParams){

$scope.$parent.title = 'Product Detail';

$scope.product = products[$routeParams.id];    

// when('/products/:id') 메서드를 사용했으므로 id 속성 을 사용할 수 있다.

}

</script>

컨트롤러는 ng-view 속성이 지정된 공간과 바인딩됩니다.

<body> 

<h1>{{title}}</h1>        // 컨트롤러 적용 범위의 상위에 위치

<div ng-view></div>     // 컨트롤러가 적용되는 범위

</body>

'Angular.js' 카테고리의 다른 글

angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
Angular 컨트롤러  (0) 2014.09.12
Angular 설정  (0) 2014.09.12
  

Angular ng 속성

Posted by 단순대왕 Angular.js : 2014. 9. 12. 17:19

Angular.js 라이브러리는 문자열 "ng"로 시작하는 속성으로 기능을 적용합니다.

ng 바인드 속성

ng-model - Model 객체를 생성합니다. 

ng-model 속성은 input 태그에 입력합니다. 입력한 모델은 자동으로 컨트롤러와 동기화 됩니다.

예)

<input type="text" ng-model="name"/>

<h1>{{ name }}</h1>

ng-bind - 모델을 바인딩합니다.

특정 태그의 내부 영역을 특정 모델과 동기화하겠다는 의미입니다.

예)

<input type="text" ng-model="name"/>

<h1 ng-bind="name"></h1>

ng-show - 참이면 태그를 보이게 하고 거짓이면 보이지 않게 합니다.

ng-hide - 참이면 태그를 보이지 않게 하고 거짓이면 보이게 합니다.

ng-disabled - 참이면 disabled 속성을 부여하고 거짓이면 부여하지 않습니다.

ng-readonly - 참이면 readonly 속성을 부여하고 거짓이면 부여하지 않습니다.

ng-checked - 참이면 checked 속성을 부여하고 거짓이면 부여하지 않습니다.

ng-multiple - 참이면 multiple 속성을 부여하고 거짓이면 부여하지 않습니다.

예)

<input type="checkbox" ng-model="check"/>

<h1 ng-show="check">Lorem ipsum dolor amet_1</h1>

<h1 ng-hide="check">Lorem ipsum dolor amet_2</h1>

<input ng-disabled="check" value="disabled confirm" />


ng 이벤트 속성

ng-check  

ng-click  

ng-dbclick  

ng-mousedown  

ng-mouseenter  

ng-mouseleave 

ng-mousemove  

ng-mouseover  

ng-mouseup 

ng-submit  

ng-keydown  

ng-keyup  

예)

function basicController($scope){

$scope.messageBox = function(event){

alert($scope.message);

}

}

<div ng-controller="basicController">

<input type="text" ng-model="message"/>

<button ng-click="messageBox( $event )">Show</button>    // 이벤트 객체 ($event)를 전달

</div>


ng 외부 템플릿 속성

Angular.js 라이브러리는 별도로 분리된 템플릿 파일을 현재 페이지에 추가하는 기능을 지원합니다.

ng-include - 외부 템플릿 적용을 선언합니다.

src - 외부 템플릿 파일을 지정합니다.

예)

Template.html 파일

<h1>{{ title }} </h1>

<hr />


HTMLPage.html

function basicController($scope){

$scope.template = 'template.html';

$scope.title = 'Template Basic';

}

<div ng-controller="basicController">

<div ng-include src="template"></div>    // 템플릿 적용

</div>

[error]

XMLHttpRequest cannot load file:///D:/modernWEB/Template/Template.html. 

Received an invalid response. Origin 'null' is therefore not allowed access.

// 템플릿 내용을 ajax로 loading 하여 화면에 표시한다.



'Angular.js' 카테고리의 다른 글

angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular 컨트롤러  (0) 2014.09.12
Angular 설정  (0) 2014.09.12
  

Angular 컨트롤러

Posted by 단순대왕 Angular.js : 2014. 9. 12. 15:25

컨트롤러

Knockout 라이브러리가 웹 페이지 전체에 바인딩했던 것과 다르게 Angular.js 라이브러리는

컨트롤러 단위로 바인딩합니다.

특정 공간 분할 태그에 ng-controller 속성을 부여하고 해당 속성 값과 같은 이름의 함수를 생성합니다.

예)

function basicController($scope){    // 반드시 매개변수로 $scope 식별자를 사용해야 합니다.

$scope.title = 'Students List';

$scope.students = [{ ... }, { ... }];

$scope.getAverage = function(){

var output = 0;

for(var i=0; i<$scope.students.length; i++){

output += $scope.students[i].score;

}

return output / $scope.students.length;

};

}

<div ng-controller="basicController">

<h1>{{ title }}</h1>

</div>


모델과 컬렉션

Angular.js 라이브러리는 모델과 컬렉션을 위한 별도의 생성자 함수를 제공하지 않습니다.

변수 $scope의 속성으로 지정하기만 하면 모델 바인딩과 컬렉션 바인딩이 자동으로 수행됩니다.

<div ng-controller="basicController">

<h1>{{ title }}</h1>

<table>

<tr ng-repeat="student in students">

<td>{{ student.id }}</td>

<td>{{ student.name }}</td>

<td><input type="number" ng-model="student.score" /></td>

</tr>

</table>

</div>


메서드

Angular.js 라이브러리는 템플릿에서 함수를 실행해 함수를 실행해 결과를 출력합니다.

예)

<div ng-controller="basicController">

<h3>Average : {{ getAverage() }}</h3>

</div>

function basicController($scope){

$scope.getAverage = function(){

var output = 0;

for(var i=0; i<$scope.students.length; i++){

output += $scope.students[i].score;

}

return output / $scope.students.length;

};

}


이벤트

예)

<div ng-controller="basicController">

<h1>{{ title }}</h1>

<form ng-submit="submit()">    // submit 이벤트 연결

<input ng-model="name" type="text">

<input type="submit" value="ADD" />

</form>

</div>

function basicController($scope){

$scope.submit = function(){

$scope.students.push({

id: $scope.students.length + 1,

name: $scope.name,

score: 0.0

});

$scope.name = '';

};

}

'Angular.js' 카테고리의 다른 글

angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
Angular 설정  (0) 2014.09.12
  

Angular 설정

Posted by 단순대왕 Angular.js : 2014. 9. 12. 14:11

Angular.js 라이브러리는 구글에서 개발한 라이브러리입니다.

Angular.js 라이브러리는 Backbone.js 라이브러리처럼 라우터를 지원하며

Knockout 라이브러리처럼 자동 바인딩을 사용합니다.

Angular.js 라이브러리는 MVC 패턴과 MVVM 패턴을 혼합한 형태로 사용합니다.


Angular.js 라이브러리는 문자열 "ng"로 시작하는 속성으로 기능을 사용합니다.

html 태그에 ng-app 속성을 사용하는 것은 HTML 페이지에서 Angular.js 라이브러리를

사용하겠다고 선언하는 것입니다.

<html ng-app>

<head></head>

<body>

<input ng-model="text"/>

<h1>Input: {{ text }} </h1> // Angular.js 라이브러리 템플릿

</body>

</html>

In Angular, the view is a projection of the model through the HTML template. This means that whenever the model changes, Angular refreshes the appropriate binding points, which updates the view.

'Angular.js' 카테고리의 다른 글

angular example  (0) 2014.09.15
Angular 서비스  (0) 2014.09.15
Angular 페이지 라우트  (0) 2014.09.15
Angular ng 속성  (0) 2014.09.12
Angular 컨트롤러  (0) 2014.09.12
  
 «이전 1  다음»