angularjs - 如何在 Angular 混合应用程序中的组件之间进行通信?

标签 angularjs angular

我正在升级 Angular 1.5 应用程序,如下 the upgrade guide 。因此,我使用 UpgradeAdapter 启动了一个混合应用程序,并在 Angular 2 中实现了我的组件。这些组件通过类似于 this suggestionSharedService 进行通信。 。

然而,一个组件正在使用 Angular 1 指令,它会发出一些事件,例如:
$scope.$emit('somethingHappened')

在我的index.ts中:

angular.module('myModule', [
        require('my-ng1-directive')
        //...
])
//...
.component('myNg1Component', {
        template: '<my-ng1-directive address="{{$ctrl.address}}"></my-ng1-directive>',
        bindings: {
             address: '@'
        }
})

该指令已升级并赋予我的应用程序的根模块:

@NgModule({
    imports: [
        //...
    ],
    declarations: [
        upgradeAdapter.upgradeNg1Component('myNg1Component')
    ],
    providers: [
        SharedService
    ]
})
export class AppModule { }

我的Angular 2组件模板中的某处:

<my-ng1-component address="{{someAddress}}"></my-ng1-component>

该组件需要监听这些事件。通常我会这样做:

$scope.$on('somethingHappened', function () {
    // do something
})

如何监听 Angular 2 组件中 Angular 1 指令发出的事件?

由于 Angular 2 中没有 $scope,我想知道这是否可能?

最佳答案

找到了解决方案。

感谢@estus 的提示。

index.ts

angular.module('myModule', [
        require('my-ng1-directive')
        //...
])
//...
.component('myNg1Component', {
        template: '<my-ng1-directive address="{{$ctrl.address}}" on-something-happened="$ctrl.somethingHappened()"></my-ng1-directive>',
        bindings: {
             address: '@',
             onSomethingHappened: '&'
        },
        controller: function() {
            this.somethingHappened = function() {
                this.onSomethingHappened(); // "trigger" the output
            };
        }
})

myNg1.directive.js中使用输出绑定(bind)

// ...
bindToController: {
    address: '@',
    onSomethingHappened: '&'
},
controller: function() {
    // "trigger" the output somewhere in the controller
    this.onSomethingHappened();
}

Angular 2 组件模板中使用myNg1Component(注意输出绑定(bind)的 Angular 2 表示法)

<my-ng1-component address="{{someAddress}}" (onSomethingHappened)="doSomething()"></my-ng1-component>

关于angularjs - 如何在 Angular 混合应用程序中的组件之间进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40789553/

相关文章:

带有 webpack 的 Angular 4 AOT

JavaScript 对象和 css 类出现问题

javascript - 如何使用 AngularJS 中的另一个输入更改密码验证?

javascript - 需要 ng-repeat 的 Angular 方向吗?

angularjs - 如果表单名称是变量,如何从 ng-form 访问表单?

javascript - AngularJS:ng-repeat并不总是显示数据

javascript - $scope angularjs 中的连接字符串

angular - 如何减小275MB的Hello World Electron Electron 封装的大小?

arrays - 如何将对象插入数组?在 Angular 7

Angular Testing : Cannot read property 'nativeElement' of null