Angular.js: $onChanges 수λͺ… μ£ΌκΈ° ν›„ν¬μ—μ„œ UNINITIALIZED_VALUE 감지

에 λ§Œλ“  2016λ…„ 07μ›” 15일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: angular/angular.js

λ²”μœ„ κ°μ‹œμžλ₯Ό μ‚¬μš©ν•˜λ©΄ μƒˆ κ°’κ³Ό 이전 값이 λ™μΌν•œμ§€ ν™•μΈν•˜μ—¬ κ°μ‹œμžκ°€ 처음 μ‹€ν–‰λ˜λŠ”μ§€ μ—¬λΆ€λ₯Ό 감지할 수 μžˆμŠ΅λ‹ˆλ‹€.

$scope.$watch('expr', function (newValue, oldValue) {
    if (newValue === oldValue) {
        // first time running
    }
});

κ·ΈλŸ¬λ‚˜ Angular 1.5 $onChanges 수λͺ… μ£ΌκΈ° 후크λ₯Ό μ‚¬μš©ν•˜λ©΄ 자리 ν‘œμ‹œμž 개체 UNINITIALIZED_VALUEκ°€ 이전 κ°’μž…λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 이λ₯Ό μ‰½κ²Œ 확인할 수 μžˆλŠ” 방법은 μ—†μŠ΅λ‹ˆλ‹€. μƒμ„±μžμ˜ 이름을 ν™•μΈν•˜μ—¬ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

ExampleController.prototype.$onChanges = function (changes) {
    if (changes.expr.previousValue.constructor.name === 'UNINITIALIZED_VALUE') {
        // first time running
    }
};

κ·ΈλŸ¬λ‚˜ 그것은 μ•½κ°„μ˜ ν•΄ν‚Ήμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

λ‚΄κ°€ 생각할 수 μžˆλŠ” κ°€μž₯ 쒋은 해결책은 UNINITIALIZED_VALUE 개체λ₯Ό μƒμˆ˜(읽기 μ „μš©)둜 μ €μž₯ν•˜μ—¬ 비ꡐ할 수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€(예: angular.UNINITIALIZED_VALUE ). λ¬Όλ‘  λ‹€λ₯Έ μ†”λ£¨μ…˜λ„ μžˆμ„ 수 μžˆμ§€λ§Œ.

감사 ν•΄μš”!!

works as expected

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

각 change 개체( changes κ°œμ²΄μ— 포함됨)μ—λŠ” 이 μ •ν™•ν•œ λͺ©μ μ„ μœ„ν•œ isFirstChange() λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

각 change 개체( changes κ°œμ²΄μ— 포함됨)μ—λŠ” 이 μ •ν™•ν•œ λͺ©μ μ„ μœ„ν•œ isFirstChange() λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

isFirstChange() λŠ” λ³€κ²½ κ°œμ²΄μ—μ„œ μ‚¬μš©ν•  수 μ—†μœΌλ―€λ‘œ λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

ctrl.$onChanges = function (changesObj) { if (changesObj.fieldInfo.previousValue.constructor.name === 'UNINITIALIZED_VALUE') { init(); } };

@saurajit μžˆλŠ” 것 같지 μ•Šμ§€λ§Œ(예: Dev 도ꡬ μ½˜μ†”μ—μ„œ change.expr 개체λ₯Ό 가리킬 λ•Œ λˆ„λ½λœ κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¨) ν•΄λ‹Ή κΈ°λŠ₯은 개체의 ν”„λ‘œν† νƒ€μž…μ— 숨겨져 μžˆμŠ΅λ‹ˆλ‹€. changes.expr.isFirstChange() (λ˜λŠ” κ·€ν•˜μ˜ μ˜ˆμ—μ„œ changesObj.fieldInfo.isFirstChange() )λ₯Ό μ‹€ν–‰ν•΄ λ³΄μ‹­μ‹œμ˜€.

isFirstChange() λŠ” λ³€κ²½ κ°œμ²΄μ—μ„œ μ‚¬μš©ν•  수 μ—†μœΌλ―€λ‘œ λ‹€μŒ μ½”λ“œλ₯Ό μ‚¬μš©ν–ˆμŠ΅λ‹ˆλ‹€.

ctrl.$onChanges = function (changesObj) { if (changesObj.fieldInfo.previousValue.constructor.name === 'UNINITIALIZED_VALUE') { init(); } };

μ£„μ†‘ν•˜μ§€λ§Œ μΆ•μ†Œλœ λ²ˆλ“€μ—μ„œλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

https://github.com/angular/angular.js/issues/14917#issuecomment -232971141μ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ isFirstChange() λ©”μ„œλ“œλŠ” changes λ‚΄λΆ€μ˜ λͺ¨λ“  _ 객체 _에 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ 이 경우 changesObj.fieldInfo.isFirstChange() 이어야 ν•©λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰