【问题标题】:Angular 2 and ActionCable integrationAngular 2 和 ActionCable 集成
【发布时间】:2016-08-28 06:45:50
【问题描述】:

我正在尝试通过将此库集成到前端 https://github.com/mwalsher/actioncable-js 来使 Angular2 应用程序(使用 angular-cli 引导)与 Rails 的 ActionCable 一起使用。

我 npm 安装了 lib,

将此添加到 angular-cli-build.js

'actioncable-js/index.js',

这在 system-config.ts 中:

/** Map relative paths to URLs. */
const map: any = {
  'moment': 'vendor/moment/moment.js',
  'ng2-bootstrap': 'vendor/ng2-bootstrap',
  'lodash': 'vendor/lodash',
  'actioncable-js': 'vendor/actioncable-js'
};

/** User packages configuration. */
const packages: any = {

  'ng2-bootstrap': {
    format: 'cjs',
    defaultExtension: 'js',
    main: 'ng2-bootstrap.js'

  },
  'actioncable-js':{
    main: 'index.js'
  },
  'moment':{
    format: 'cjs'
  },
  'lodash':{
    main: "lodash.js"
  }
};

将此添加到我的组件中:

import { ActionCable } from 'actioncable-js';

但此消息的构建错误:

找不到模块“actioncable-js”。

有人知道为什么吗?

我的猜测是缺少输入,但我不确定如何解决此问题。

【问题讨论】:

    标签: ruby-on-rails angular ruby-on-rails-5 actioncable


    【解决方案1】:

    Rails 已在此处发布了官方可操作包:

    https://www.npmjs.com/package/actioncable

    【讨论】:

    • 快速教程链接已损坏。请问可以分享一个新的吗?提前致谢。
    【解决方案2】:

    不,打字没有问题。您缺少的是如何在 angular 2 typescript 应用程序中使用 Javascript 库。如果要在 TypeScript 应用程序中使用 JavaScript 库,则需要导入库 import 'actioncable-js',然后必须声明变量。 declare let ActionCable:any 这告诉 typescript 我们的应用程序中有一个全局变量 ActionCable。现在您可以在您的 Angular 2 组件实现中访问它并做任何您想做的事情。你可以阅读讨论here

    angular-cli.build.js

    vendorNpmFiles: ['actioncable-js/**/*.js']

    systemjs.config.js

      map:{ 'actioncable-js':'vendor/actioncable-js/dist/action_cable.js'}
    
      package:{'actioncable-js': defaultExtension: 'js'}  }
    

    `

    app.component.ts

    import 'actioncable-js'; 
    
    declare let ActionCable:any;
    
    @Component({
       ....    
    })
    
    export class AppComponent implements OnInit{
      constructor(){}
      ngOnInIt(){
       //can access *ActionCable* object here
      }
    }
    

    【讨论】:

    • 所以我按照步骤操作,现在一切都编译并运行,但是当我尝试在 ngOnInit() 中控制台日志 ActionCable 时,我在控制台中收到此错误:EXCEPTION: ReferenceError: Can't find variable: ActionCable
    • @avatsaev 我误写了package:{'actioncable-js': format: 'js'} }。将此更改为package:{'actioncable-js': defaultExtension: 'js'} }。希望这会奏效。
    • 是的,它奏效了,我知道 SO 上的某个人会有解决方案。我唯一不喜欢的是declare let ActionCable:any;,感觉就像一个黑客。感谢您的帮助
    猜你喜欢
    • 2017-11-29
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 2018-05-25
    • 2016-05-09
    • 2021-05-26
    相关资源
    最近更新 更多