'바인딩'에 해당되는 글 2건

  1. 2014.09.15 Angular 바인딩/ 팩토리
  2. 2014.09.11 Knockout 바인딩 종류

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
  

Knockout 바인딩 종류

Posted by 단순대왕 Knockout : 2014. 9. 11. 12:32

바인딩 종류

입력 양식 바인딩

checked - 체크 상태를 모델로 지정

value - 입력 양식의 값을 모델로 지정

enable - 모델의 값에 따라 enable 속성을 지정

disable - 모델의 값에 따라 disable 속성을 지정

<input type="checkbox" data-bind="checked :chk" />

<h4>Enable Value</h4>

<input type="text" data-bind="enable :chk" />

ko.applyBindings({

chk : ko.observable(false)

});

options - options 태그를 생성하는 데 사용

selectedOptions - 선택된 options 태그를 의미

<h1 data-bind="text:region"></h1>

<select data-bind="options:regions, selectedOptions:region"></select>

ko.applyBindings({

region: ko.observable('선택하세요.'),

regions: ko.observableArray(['강남점', '교대점', '선릉점', '신촌점', '홍대점', '종로점' ])

});


속성 바인딩

attr - HTML 태그에속성을 바인딩

<div data-bind="foreach:collection">

<h2><a data-bind="attr: { href:href }, text:name"></a></h2>

<p data-bind="text:description"></p>

</div>

ko.applyBindings({

collection: ko.observableArray([{

name: '구글',

href: 'http://google.co.kr',

description: 'Lorem ipsum dolor sit amet'

}, 

{

name: '페이스북',

href: 'http://www.facebook.co.kr',

description: 'Lorem ipsum dolor sit amet'

}])

});


스타일 바인딩

style - style 속성을 바인딩

css - class 속성을 바인딩

<div data-bind="foreach:products">

<div data-bind="style: { color: price < 1000 ? 'blue' : 'red' }">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

<p data-bind="text:description"></p>

</div>

</div>

    

<style>

.expensive {

color: white;

background: red;

}

</style>

<div data-bind="foreach:products">

<div data-bind="css: { expensive: 1000 < price  }">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

<p data-bind="text:description"></p>

</div>

</div>


조건 바인딩

if - 내부 태그를 참일 때 보이게 합니다.

ifnot - 내부 태그를 거짓일 때 보이게 합니다.

<div>

<span class="add-on">최소</span>

<input type="text" data-bind="value:limitMin" />

</div>

<div>

<span>최대</span>

<input type="text" data-bind="value:limitMax" />

</div>

<div data-bind="foreach:products">

<div data-bind="if: $parent.limitMin() < price && price < $parent.limitMax()">

<h2 data-bind="text:name"></h2>

<p data-bind="text:price + '원'"></p>

</div>

</div>

ko.applyBindings({

limitMin: ko.observable(Number.MIN_VALUE),

limitMax: ko.observable(Number.MAX_VALUE),

products: ko.observableArray([{name: '핫세븐', price: 800}, {name: '블루불', price: 2000}])

});


예)

<a href="/logout">Logout</a>

<ul data-bind="foreach:todos">

<li data-bind="style:{ opacity: completed() ? 0.3 : 1.0 }">

<input type="checkbox" 

data-bind=" checked:completed, event:{ change:$parent.checkChange }" />

// you can use $parent to refer to data from outside the foreach

<span data-bind="text:title"></span>

</li>

</ul>

<form>

<input type="text" data-bind="value:title" />

<button data-bind="click:add">Add</button>

</form>

<p><a data-bind="click:remove">Remove items</a></p>


$(document).ready(function () {

$.getJSON('/todos', function (results) {

var todos = ko.observableArray([]);

ko.utils.arrayForEach(results, function (item) {

todos.push({

_id: ko.observable(item._id),

title: ko.observable(item.title),

completed: ko.observable(item.completed)

});

});

ko.applyBindings({

title: ko.observable(''),

todos: todos,

add: function (self) { },

remove: function (self) { },

checkChange: function (self) { }

});

});

});

Knockout 라이브러리는 이벤트 리스너로 다음 매개변수를 전달합니다.

this.submit = function(self, event){ };

매개변수 self는 이벤트를 발생한 뷰모델 자체를 의미하고

매개변수 event는 이벤트 객체를 의미합니다.

jQuery라이브러리를 사용하면 event 객체로 jQuery 이벤트 객체가 전달되며, 사용하지 않으면

일반 이벤트 객체가 전달됩니다.


'Knockout' 카테고리의 다른 글

knockout - 바인딩  (0) 2014.09.05
knockout - 기본 객체  (0) 2014.09.05
MVVM 패턴  (0) 2014.09.05
  
 «이전 1  다음»