Angular 1.5 ๋ฆด๋ฆฌ์ค์ ํจ๊ป .component() ๋ฐ๋ก ๊ฐ๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ ์์ ์ง์๋ฌธ์ ๋ง๋ค ์ ์์ต๋๋ค.
๋น์ ์ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ด๋ค ์ ์์ด ์์ต๋๊น?
๋๋ ํ๋์ ๋น์ ์ ์คํ์ผ ๊ฐ์ด๋์ ์ด๋ ฌํ ์ถ์ข ์์์ผ๋ฉฐ ์ฌ๊ธฐ์ ๋ด๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ปจํธ๋กค๋ฌ๊ฐ ํ์ ์๋ ์์ ๊ฒ๋ค์ ํธ์ด์คํ ๋ ํจ์์ ๋ฐํ ๊ฐ๊ณผ ๊ฐ์ ํ์ผ ์์ ํ ํ๋ฆฟ์ ์์ฑํ๋ ๊ฒ์ ์ข์ํฉ๋๋ค.
(function() {
'use strict';
var componentConfig = {
template: generateTemplate(),
bindings: {
kpiVal: '=',
kpiLabel: '=',
},
};
angular
.module('app.utils.kpi')
.component('sfKpi', componentConfig);
//
function generateTemplate() {
return [
'<div class="sf_kpi">',
' <div class="sf_kpi__number">{{ $ctrl.kpiVal }}</div>',
' <div class="sf_kpi__label">{{ $ctrl.kpiLabel }}</div>',
'</div>',
].join('');
}
}());
๊ณ ๊ธ ํ ํ๋ฆฟ์ ๊ฒฝ์ฐ ํ ํ๋ฆฟ์ ๋ณ๋์ ํ์ผ์ ๋ฃ๊ณ 'templateUrl' ์์ฑ์ ์ฌ์ฉํฉ๋๋ค.
(function() {
'use strict';
var componentConfig = {
templateUrl: 'components/active-places/active-places.widget.html',
controller: controller,
};
angular
.module('app.widget.activeplaces')
.component('activePlaces', componentConfig);
/* <strong i="12">@ngInject</strong> */
function controller($log, activityService) {
var vm = this;
vm.activities = [];
vm.isLoading = true;
vm.doFunnyStuff = doFunnyStuff;
activate();
function activate() {
$log.info('๐ activating activePlaces component');
activityService.getActivites()
.then(fetchData)
.catch(handleError)
.finally(stopLoader);
//
function fetchData(activities) {
vm.activities = activities;
$log.log('๐ activePlaces activities fetched: ', activities);
}
function handleError(err){
$log.error('๐ฅ problem fetching activePlaces data', err);
}
function stopLoader() {
vm.isLoading = false;
$log.info('๐ช activePlaces component started');
}
}
// methods
function doFunnyStuff() {
vm.activities.push('yolo');
}
}
}());
๋ํ $onInit hook์ ๋ํ ๊ทํ์ ์๊ฒฌ๊ณผ ๊ตฌ์ฑ ์์๋ฅผ ์ด๋ป๊ฒ ํ ์คํธํด์ผ ํ๋ค๊ณ ์๊ฐํ๋์ง ๊ถ๊ธํฉ๋๋ค.
๊ฐ์ฌ ํด์
(function() {
'use strict';
var componentConfig = {
bindings: {
data: '<'
},
templateUrl: 'components/active-places/active-places.widget.html',
controller: 'ActivePlacesController as vm',
};
angular
.module('app.widget.activeplaces')
.component('activePlaces', componentConfig)
.controller('ActivePlacesController', ActivePlacesController);
/* <strong i="5">@ngInject</strong> */
function ActivePlacesController($log, activityService) {
var vm = this;
vm.activities = [];
vm.isLoading = true;
vm.doFunnyStuff = doFunnyStuff;
// methods
function doFunnyStuff() {
vm.activities.push('yolo');
}
}
}());
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ํ
์คํธํ ์ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ด ๋ฐฉ๋ฒ์ ์ ํธํฉ๋๋ค.
(function() {
'use strict';
angular
.module('app.widget.activeplaces')
.component('activePlaces', {
bindings: {
data: '<'
},
templateUrl: 'components/active-places/active-places.widget.html',
controller: 'ActivePlacesController as vm',
})
.controller('ActivePlacesController', ActivePlacesController);
function ActivePlacesController($log, activityService) {
var vm = this;
vm.activities = [];
vm.isLoading = true;
vm.doFunnyStuff = doFunnyStuff;
// methods
function doFunnyStuff() {
vm.activities.push('yolo');
}
}
}());
์ด ๋ฐฉ๋ฒ์ผ๋ก ์ปจํธ๋กค๋ฌ๋ฅผ ํ ์คํธํ ์ ์์ต๋๋ค.
@softsimon : v1.5.0
ngMock#$componentController ๋ฅผ ๋์
ํ๋ฏ๋ก ํ
์คํธ ์ฉ์ด์ฑ์ ์ํด ์ปจํธ๋กค๋ฌ๋ฅผ ๋ณ๋๋ก ๋ฑ๋กํ ํ์๊ฐ ์์ต๋๋ค :smiley:
๋ ๋ฒ์งธ๋ @gkalpak ์
๋๋ค. @softsimon ์์์ ์ด ์ค์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
.controller('ActivePlacesController', ActivePlacesController);
๋๋ ๋ํ ์ด ์คํ์ผ ๊ฐ์ด๋์ ์ด๋ ฌํ ํฌ์ ๋๋ค.
@xavhan for $onInit
๊ทํ์ ์์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.
vm.$onInit = activate;
function activate() {
}
init
๋ผ๊ณ ๋ถ๋ฅด๊ณ v1.5.0์์ ํ์ฑํํ์ง ์์ ์ ์์ต๋๋ค.
@johnpapa ๋ ์ ์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ์๋ดํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.
:+1:
vm.$onInit = activate;
function activate() {
}
๊ตฌ์ฑ ์์ ํ ๋ก ์ ์ํ ์ฅ์๋ก #766 ํ์
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ ๋ฒ์งธ๋ @gkalpak ์ ๋๋ค. @softsimon ์์์ ์ด ์ค์ ๊ฑด๋๋ธ ์ ์์ต๋๋ค.
.controller('ActivePlacesController', ActivePlacesController);
๋๋ ๋ํ ์ด ์คํ์ผ ๊ฐ์ด๋์ ์ด๋ ฌํ ํฌ์ ๋๋ค.
@xavhan for
$onInit
๊ทํ์ ์์์ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํฉ๋๋ค.vm.$onInit = activate;
function activate() {
}
init
๋ผ๊ณ ๋ถ๋ฅด๊ณ v1.5.0์์ ํ์ฑํํ์ง ์์ ์ ์์ต๋๋ค.@johnpapa ๋ ์ ์ด์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์๋์ง ์๋ดํด ์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.