如何将 <ng-click> 放入 Endpoint.java 中的字符串并将此字符串发送回客户端?

Posted

技术标签:

【中文标题】如何将 <ng-click> 放入 Endpoint.java 中的字符串并将此字符串发送回客户端?【英文标题】:How to put <ng-click> in string in Endpoint.java and send this string back to client side? 【发布时间】:2017-02-27 13:32:54 【问题描述】:

我正在开发一个Chat application,它在Web Socket protocol 中的登录用户之间传递消息。在某些用户发送的与他人聊天的消息中,我想为其添加一些设计,以便可以选择回复它。我试图为这条消息嵌套到链接reply 和其中的angular 标签ng-click,这将为用户打开一个modal reply(如下所示)。

ng-click 的内容是一个函数,它获取用户想要回复的消息 ID 作为输入。

我的问题是,当单击reply 时,会为用户打开回复模式,但从未调用此函数!

这是我在ChatEndPoint.java中的代码:

String m="<div>
             <div>" + 
                 _content 
          + "</div>  &nbsp; 
             <a href='#' data-toggle='modal' data-target='#replyModal'
              ng-click='storemsgid("+_msgid+")'><small>reply</small></a>
          </div> ";

注意事项:

_content 有一个字符串值,_msgid 有一个整数值。 _content 出现在聊天控制台中。 在 html 页面中有一个函数 storemsgid(id) 并且它可以工作(相信我这不是导致问题的原因:))。 新消息将插入到聊天控制台中(即div标签),这条消息有自己的ng-controller,它包含函数storemsgid(id)

请帮助我或指导我。

谢谢

【问题讨论】:

【参考方案1】:

使用 ng-bind-html directive 从控制器插入 HTML:

  <body ng-app="myApp" ng-controller="myVm as vm">
    <h1>Binding a click handler to AngularJS</h1>
    <p>vm.rawMsg</p>

    <div ng-bind-html="vm.msg"></div>

  </body>

JS:

app.controller("myVm", function($sce) 
  var vm = this;
  vm.rawMsg = '<button onclick="angular.element(this).scope().vm.alert(99)">Alert 99</button>'
  vm.msg = $sce.trustAsHtml(vm.rawMsg);

  vm.alert = (x) => alert(x);
)

ng-bind-html 指令不会编译 AngularJS 指令,例如 ng-click。而是使用onclick attribute 和angular.element 来调用作用域函数:

<button onclick="angular.element(this).scope().vm.alert(99)">
   Alert 99
</button>

DEMO on PLNKR。

【讨论】:

以上是关于如何将 <ng-click> 放入 Endpoint.java 中的字符串并将此字符串发送回客户端?的主要内容,如果未能解决你的问题,请参考以下文章

Angularjs ng-click:如何获取`this`数据?

AngularJS 将字符串作为函数传递给 ng-click

ng-click

AngularJS - 在使用 ng-click 运行函数之前需要输入字段

ng-click 在父 div 也在子 div

将复选框值传递给 Angular 的 ng-click