Angular Dart component events

后端 未结 2 1106
执念已碎
执念已碎 2020-12-19 18:56

I am trying to pass custom events from a component to its parent component/controller

confirm.html

相关标签:
2条回答
  • 2020-12-19 19:07

    This should be the same, just add a scope argument to the constructor so the component gets the scope injected.

    There was a related change in Angular 0.14.0 https://github.com/angular/angular.dart/commit/181f01448555c475869505491159045904e5dc89

    I haven't yet tried this. From the description you need to implement ScopeAware

    @Component(...)
    class MyComponent implements ScopeAware {
      Watch watch;
      MyComponent(Dependency myDep) {
        // It is an error to add a Scope / RootScope argument to the ctor and will result in a DI
        // circular dependency error - the scope is never accessible in the class constructor
      }
    
      void set scope(Scope scope) {
         // with this scope you should be able to use emit
         // This setter gets called to initialize the scope
         watch = scope.rootScope.watch("expression", (v, p) => ...);
      }
    }
    
    0 讨论(0)
  • 2020-12-19 19:29

    Based on the answer from Günter i built this working example:

    @Component(
        selector: "confirm-component",
        templateUrl: 'component/confirm.html',
        useShadowDom: false,
        publishAs: "ctrl"
    )
    
    class ConfirmComponent implements ScopeAware {
        Scope scope;
    
        void yes(){
            scope.emit('confirm', 'yes');
        }
    
        void no(){
            scope.emit('confirm', 'no');
        }
    }
    
    @Component(
        selector: "my-component",
        templateUrl: 'component/my.html',
        useShadowDom: false,
        publishAs: "ctrl"
    )
    class MyComponent implements ScopeAware{
    
        void set scope(Scope scope) {
            Stream mystream = scope.on('confirm');
            mystream.listen((event){
                print('confirmed: ' + event.data);
            });
        }
    }
    
    0 讨论(0)
提交回复
热议问题