์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉํ์ฌ ๊ด์ฐฐํ๋ ์( Style Y032 )์์๋ ๋ทฐ์ SomeController as vm
์๋ ๊ฒฝ์ฐ์๋ง ์ค๋ํซ์ด ์๋ํ๊ธฐ ๋๋ฌธ์ ์ปจํธ๋กค๋ฌ๋ฅผ ๋ทฐ์ ์ฐ๊ฒฐํ๋ค๋ ์ ์ ๋ถ๋ช
ํ ํ์ง ์์ต๋๋ค.
๋์๊ฒ ์ด๊ฒ์ ์ ์ฒด ์ปจํธ๋กค๋ฌ๋ฅผ ๊ตฌ๋ฌธ์ผ๋ก ์ฌ์ฉํ ๋์ ๋จ์ ์ ๋๋ค. $scope.watch์ ํจ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ฑฐ๋ ํ์ฌ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์ ๋ํด ์ธ ์ ์์ต๋๋ค.
๋น์ ์ด ์ข์ํ๋ค๋ฉด PR
controller as
์ ํจ๊ป $scope.$watch
controller as
๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์ ๋ํด ์์ฑํด์ผ ํฉ๋๊น ์๋๋ฉด ๋ค์๊ณผ ๊ฐ์ ํจ์ ํ๊ธฐ๋ฒ์ ๋์
ํด์ผ ํ๋ค๊ณ ์๊ฐํ์ญ๋๊น?
$scope.$watch(function () {
return vm.title;
}, function(current, original) {
$log.info('vm.title was %s', original);
$log.info('vm.title is now %s', current);
});
์ด์ ์๋ฅผ ๋์ฒดํ๊ฑฐ๋ ๋ ๋ค ๋น๊ตํด์ผ ํฉ๋๊น?
๊ทํ์ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ค๋ฉด ๋ ๋ค ๋น๊ตํ๊ณ ๊ทํ์ ํผํ๊ณ ๊ถ์ฅ๋๋ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
๋ธ๋ฅด๋ฅด ์ปจํธ๋กค๋ฌ ๋ด๋ถ์์ ์ํฐ ํจํด์ ๊ด์ฐฐํฉ๋๋ค. ์ด์จ๋ ์ด ์์ ์์๋ ์ค์ ๋ก ํ์ํ์ง ์์ต๋๋ค. ๋ณ๊ฒฝ ์ด๋ฒคํธ ๋ฐ์ธ๋ฉ์ ์ถ๊ฐํ๋ ๊ฒ์ด ๋ ๋์ ๊ฒ์ ๋๋ค(๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ด Ng2์์ ํ ์ผ์ด๋ผ๊ณ ๋ฏฟ์ต๋๋ค).
๋๋ ์ด ํ ๋ก ์ "ControllerAs"์ ํ์ ์น์ ์ผ๋ก ํ๊ณ ์ถ์ต๋๋ค. ์ด ์น์ ์ ์ฌ๋๋ค์๊ฒ ์ปจํธ๋กค๋ฌ ๋ด๋ถ๋ฅผ ๋ณด์ง ์๋๋ก ์ด๊ตฌํ๋ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ "ํ์ํ๋ค๋ฉด" @Jandalf ๋ฒ์ ์ ์ฌ์ฉํ๊ณ 'vm.title' ํํ์์ ํ๊ฐํ ๋์ ์ํ์ ๋ํด ํฌ๊ฒ
์ด ๋ฏธ๋ฆฌ๋ณด๊ธฐ์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ์ธ์?
์ฐธ๊ณ : ๋ค์ด์ ์คํธ ์ฃผ๊ธฐ์ ๋ ๋ง์ ๋ก๋๋ฅผ ์ถ๊ฐํ๋ฏ๋ก ์ฃผ์ํด์ ์๊ณ๋ฅผ ๋ง๋์ญ์์ค. ๋์ ngChange
์ฌ์ฉํ์ญ์์ค.
$scope.$watch
์ ํจ์ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ ์ฌํญ ํ์ธ_์?_: ์ปจํธ๋กค๋ฌ๊ฐ vm
๋ค์ ๋ค๋ฅธ ๊ฐ์ ๋ฐ์ธ๋ฉ๋ ์ ์์
๋ฐ๋ผ์ ๊ฐ์ ์ค์ ๋ก ๊ด์ฐฐํด์ผ ํ๋ ๊ฒฝ์ฐ ๋ค์ ํจํด์ ์ฌ์ฉํ์ธ์.
<input ng-model="vm.title"/>
function SomeController($scope, $log) {
var vm = this;
$scope.$watch(function () {
return vm.title;
}, function(current, original) {
$log.info('vm.title was %s', original);
$log.info('vm.title is now %s', current);
});
}
ํ
์ปจํธ๋กค๋ฌ์์ ์์ฒญํ๋ ๊ฒ์ ํผํด์ผ ํฉ๋๋ค. ๋์ ngChange๋ฅผ ์ฌ์ฉํ์ญ์์ค. ๋๋ ์๊ณ๋ฅผ ์ง์๋ฌธ์ผ๋ก ์ด๋ํฉ๋๋ค. ์๊ฐ?
๊ทธ๋ฐ ๋ค์ ๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋์ฒดํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ๋ controllerAs์ ํจ๊ป watch๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๋ก์ด ๊ท์น์ ๋๋ค.
๋์ํด, ์กด.
์ปจํธ๋กค๋ฌ์ ๊ฐ์๋ฅผ ํผํด์ผ ํ๊ณ ๋ณ๊ฒฝ ์ด๋ฒคํธ๋ฅผ ์์ ํ๊ฑฐ๋ ์ง์๋ฌธ์ ์์ฑํ๋ ๊ฒ์ด ์ ํธ๋๋์ง ์ฌ๋ถ๋ ์ถฉ๋ถํ ๋ช ํํ์ง ์์ต๋๋ค. ์ด ์กฐ์ธ์๋ "์ด์ "๊ฐ ์์ด์ผ ํฉ๋๋ค(์ปจํธ๋กค๋ฌ์ ์๊ณ๊ฐ ๋์ ์ด์ )
๊ทธ๊ฒ์ ํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์กฐ์ธ์ _๊ผญ ํด์ผ ํ๋ค๋ฉด_ ๋ณ๊ฐ์ ์์ ์ด์ด์ผ ํ๋ฉฐ ๋ฐ๋ณต์ ์ผ๋ก ๊ฐ๋ ฅํ ๊ฒฝ๊ณ ๋ก ์์ํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๋ ์ ๊ทธ๊ฒ์ ํ๊ณ ์ถ์์ง์ ๋ํ ์ฌ๋ก๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค. ๋๋ ์ฌ๊ธฐ์ ํ๋๋ฅผ ๋ณผ ์ ์์ต๋๋ค. ์ค์ ๋ก ํ๋๋ฅผ ์๊ฐํ ์ ์์ต๋๋ค. ํ ์ ์๋์?
๊ทธ๋ฌํ ์๊ฐ ์๋ค๋ฉด ๋๋ ์ด ์กฐ์ธ์ ์ ํ ํฌํจํ๊ธฐ๋ฅผ ๊บผ๋ฆด ๊ฒ์ ๋๋ค.
๋ํ ์ด ํ ์คํธ์ "์"๊ฐ ์ ๋ฅผ ํผ๋์ค๋ฝ๊ฒ ํ์ต๋๋ค. "vm" ์ด๋ฆ์ ๋ํ ์ข ์์ฑ์ ํผํ๋ ํน์ ๊ธฐ์ ์ ๋ํ "์ด์ "์ ๋๋ค. ๊ทธ๊ฒ์ ์ง์ง ์ด์ ์ ๋ถ์ฐจ์ ์ ๋๋ค. ์ด๊ฒ์ด ์ปจํธ๋กค๋ฌ์์ ์์ฒญํ๋ ์ด์ ์ ๋๋ค. "์ด๋ฐ ์์ผ๋ก ํ์ง ๋ง์ธ์" ์์ ๊ฐ ์์ ์ค๋ ๊ฒฝ์ฐ์๋ง ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ ๋ง์ ์์ ์ด ํ์ํ์ง๋ง ํ์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๊ตฐ๊ฐ์๊ฒ ์ ์?
๋๋ ์ด๊ฒ์ด ํ ๋ก ์ ์์ฝํ๋ค๊ณ ์๊ฐํ๋ค.
$scope.$watch๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋์ ng-change ๋๋ ์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ์ ์ฌ์ฉํ์ญ์์ค.
_์?_: ์๊ณ๋ ํ ์คํธํ๊ธฐ ์ด๋ ต๊ณ ๋ชจ๋ $digest ๋ฃจํ์์ ํ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์๋ ์ข์ง ์์ต๋๋ค.
/* avoid */
function SomeController($scope) {
var vm = this;
$scope.$watch(function () {
return vm.title;
}, doSomething);
function doSomething() {
}
}
<!-- recommended -->
<input type="text" ng-model="vm.title" ng-change="vm.doSomething()"/>
/* recommended */
function SomeController() {
var vm = this;
vm.doSomething = doSomething;
function doSomething() {
}
}
๊ทธ๋ฐ ๋ค์ ์ด๊ฒ์ ์ด๋ป๊ฒ ํด๊ฒฐํฉ๋๊น - http://stackoverflow.com/questions/37698263/slick-carousel-angular-dynamic-data-loading ๋ฐ http://stackoverflow.com/questions/37746972/load-the-view- template-once-server-response-received-in-angularjs-app
controllerAs๋ฅผ ์ฌ์ฉํ์ฌ ์ง์๋ฌธ ๋ด์์ $watch๋ฅผ ๋ฌธ์ํํฉ๋๊น? ๋งํฌ๋ ์๋ฃ๋ฅผ ์ถ์ฒํด์ฃผ์ค ์ ์๋์?
PR์ ๊ด์ฌ์ด ์๋ ์ฌ๋์ด ์์ต๋๊น?
๋ด ์ค๋๋ ๋ฌธ์ ์ ๋ฆฌ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ด๊ฒ์ด ํ ๋ก ์ ์์ฝํ๋ค๊ณ ์๊ฐํ๋ค.
์ปจํธ๋กค๋ฌ๋ก $watch
[์คํ์ผ[Y999](#style-y999)]
$scope.$watch๋ฅผ ์ฌ์ฉํ์ง ๋ง์ญ์์ค. ๋์ ng-change ๋๋ ์ฌ์ฉ์ ์ง์ ์ง์๋ฌธ์ ์ฌ์ฉํ์ญ์์ค.
_์?_: ์๊ณ๋ ํ ์คํธํ๊ธฐ ์ด๋ ต๊ณ ๋ชจ๋ $digest ๋ฃจํ์์ ํ๊ฐ๋๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์๋ ์ข์ง ์์ต๋๋ค.