从 jquery summernote 调用父组件函数

Posted

技术标签:

【中文标题】从 jquery summernote 调用父组件函数【英文标题】:calling parent component function from jquery summernote 【发布时间】:2021-08-11 18:52:48 【问题描述】:

我正在尝试调用我添加到 ngx-summernote 工具栏的自定义按钮组件之外的函数。我当前的代码如下。这无法编译,但我尝试过的所有其他编译方法都会给我一个错误,即它找不到函数。角 8。

test() 
    console.log('oh hai');
  


  customButton() 
    const ui = $.summernote.ui;
    const button = ui.button(
        contents: '<i class="note-icon-magic"></i> hello',
        tooltip: 'custom button',
        container: '.note-editor',
        className: 'note-btn',
        click: function() => 
          this.test()
        
      );
    return button.render();
  


  //summernote config
  config: any = 
    placeholder: 'Enter a description. You can #define up to 5 #hashtags.',
    height: "200px",
    uploadImagePath: "/api/upload",
    disableDragAndDrop: true,
    tabDisable: true,
    toolbar: [
      [
        "font",
        [
          "bold",
          "italic",
          "underline",
          "strikethrough",
          "superscript",
          "subscript",
          "color",
          "testBtn",
        ],
      ],
    ],
    buttons: 
      'testBtn' : this.customButton
    
  ;

【问题讨论】:

如果有效,请接受我的回答。 【参考方案1】:

在导入语句下方的顶部声明一个变量-

let thisContext;

在 ngOnInit 中用这个对象初始化它 -

ngOnInit() 
    thisContext = this;

在组件类中保留测试方法-

使用该变量调用 test() 函数 -

import  Component, OnInit  from '@angular/core';
import  FormControl, FormGroup, Validators  from '@angular/forms';
import  DomSanitizer  from '@angular/platform-browser';
import  codeBlockButton  from 'ngx-summernote';

declare var $;
let thisContext;
@Component(
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
)
export class AppComponent implements OnInit 
 
  constructor(private sanitizer: DomSanitizer) 

  ngOnInit() 
    thisContext = this;
  

  
  test()
    console.log("hi");
  


function customButton(context) 
  const ui = $.summernote.ui;
  const button = ui.button(
    contents: '<i class="note-icon-magic"></i> Hello',
    tooltip: 'Custom button',
    container: '.note-editor',
    className: 'note-btn',
    click: function() 
      context.invoke('editor.insertText', 'Hello from test btn!!!');
      thisContext.test();
    
  );
  return button.render();

【讨论】:

@Daniel 你能提供一个 stackblitz 链接吗?只看代码很难调试。 @Daniel 尝试将自定义函数放入 Angular 组件中,然后尝试,忽略消毒剂 嗨,我也在与 Angular 集成。你能分享一下集成部分吗?

以上是关于从 jquery summernote 调用父组件函数的主要内容,如果未能解决你的问题,请参考以下文章

将summernote在vue项目中封装成组件

(Summernote) - jQuery 和 Prototype 框架的兼容性

如果尚未调用子组件,如何从父组件调用子组件方法?

如何从父组件调用子组件方法

从reactjs中的父组件调用子组件方法

无法从父反应组件调用子反应组件的属性