2014-02-13 3 views
1

여기 Angular-Dart가 무한 루프에서 중단되는 것으로 보이는 것의 실제 버전을 제거했습니다. 나는 stackoverflow에 대한 다른 관련 질문 각각을 보았지만 어떤 진전을 이루지 못했습니다. 이것은 작동해야만하는 사소한 구현처럼 보입니다. 나는 무엇을 이해하지 못합니까?

A : :

library comp_a; 

import 'package:angular/angular.dart'; 

@NgComponent(
    selector: 'comp-a', 
    template: '<div id="compa"></div>', 
    publishAs: 'cmp' 
) 
class CompA { 
    NgModel _ngModel; 

    CompA(this._ngModel); 
} 

B :

library comp_b; 

import 'package:angular/angular.dart'; 

@NgComponent(
    selector: 'comp-b', 
    template: '<div id="compb"></div>', 
    publishAs: 'cmp' 
) 
class CompB { 
    NgModel _ngModel; 

    CompB(this._ngModel); 
} 

main() 다트 파일이 동일하게 지루 :

나는 두 개의 구성 요소 (A comp_a과 comp_b)가

library main; 

import 'package:angular/angular.dart'; 
import 'package:loop/component/comp_a.dart'; 
import 'package:loop/component/comp_b.dart'; 

class CompModule extends Module { 

    CompModule() { 
    type(CompA); 
    type(CompB); 
    } 
} 

void main() { 
    ngBootstrap(module: new CompModule()); 
} 
<!DOCTYPE html> 

<html ng-app> 
    <body> 

     <comp-a ng-model="[1]"></comp-a> 
     <comp-b ng-model="[2]"></comp-b> 

    <script type="application/dart" src="loop.dart"></script> 
    <script src="packages/browser/dart.js"></script> 
    </body> 
</html> 

내가 모두 <comp-a>...<comp-b>...이있는 경우

ng-model없는 것들 (콘솔에서 즉, 오류) 위대한 작동하지 :명

으로 내 HTML 파일입니다.

5 $digest() iterations reached. Aborting! 
Watchers fired in the last 3 iterations: [["ng-model=[1]","ng-model=[2]"],["ng-model=[1]","ng-model=[2]"],["ng-model=[1]","ng-model=[2]"]] 

STACKTRACE: 
#0  Scope._digestWhileDirtyLoop (package:angular/core/scope.dart:526:5) 
#1  Scope.$digest (package:angular/core/scope.dart:475:28) 
#2  _autoDigestOnTurnDone (package:angular/core/scope.dart:153:14) 
#3  _rootRun (dart:async/zone.dart:688) 
#4  _ZoneDelegate.run (dart:async/zone.dart:417) 
#5  NgZone._finishTurn (package:angular/core/zone.dart:91:21) 
#6  NgZone._onRunBase (package:angular/core/zone.dart:56:43) 
#7  _onRun (package:angular/core/zone.dart:61:15) 
#8  _ZoneDelegate.run (dart:async/zone.dart:417) 
#9  _CustomizedZone.run (dart:async/zone.dart:627) 
#10  NgZone.run (package:angular/core/zone.dart:143:27) 
#11  ngBootstrap (package:angular/bootstrap.dart:87:18) 
#12  main (http://127.0.0.1:3030/loop/web/loop.dart:16:14) 

감사 : 둘 다 ng-model있는 경우에만 나는 ng-model와 하나 <comp-a>... 또는 <comp-b>...이있는 경우, 일이 잘 작동 ... 내가 이것을 얻을입니다!

답변

0

Miško Hevery 여기에 질문에 대답 : https://groups.google.com/d/msg/angular-dart/MYhHBphdY8Q/0ZU8nXQu9ZEJ

귀하의 범위 이해가 올바른지. 하지만 감시자가 작동하는 방식 (곧 수정 예정)으로 인해 시스템은 각 다이제스트에 대해 새로운 배열을 만듭니다. 그것이 결코 안정되지 않는 이유입니다. 필드에 바인딩해야합니다. ng-mode = "[1]"보다는 ng-model = "someCtroller.someField"입니다. - misko

나는 컨트롤러의 지시와 div 내 두 개의 구성 요소를 포장 및 해당 컨트롤러 필드에 바인딩 할 정적 배열에서 NG-모델을 변경, 모든 것이 괜찮 았는데.

예.,

@NgController(
    selector: '[test-controller]', 
    publishAs: 'ctrl' 
) 
class TestController { 

    List a; 
    List b; 

} 

그리고, 문제를 해결

<div test-controller> 
    <comp-a ng-model="ctrl.a"></comp-a> 
    <comp-b ng-model="ctrl.b"></comp-b> 
</div> 

. 정적 배열은 테스트 용 이었기 때문에 컨트롤러를 도입하여 아무 것도 잃지 않았습니다.

0

야생 추측 같은 범위 속성에

[1][2]지도 (버그가있을 수 있습니다) 반복적으로 서로의 값을 업데이트합니다. (1,2,1,2,1,2, ...)

각 요소를 div 태그로 묶고 일부 더미 컨트롤러를 추가하여 범위를 분리하려고합니다.

여기에는 깊은 지식이 없습니다. 아마 훨씬 나은 해결책이있을 것입니다.