【问题标题】:Detect the completion of words and sentence检测单词和句子的完成
【发布时间】:2017-07-20 14:52:43
【问题描述】:

<textarea> 中,我使用(ngModelChange) 来检测内容更改并将RestAPI 发送到服务器。但是,如果我发送一个 1000 个字符的段落,当我添加一个新的 5 字母单词时,实际上它会向服务器发送 1001 + 1002 + 1003 + 1004 + 1005 = 5015 个字符,这是完全没有必要的。

所以我试图检测句子完成(或单词完成),以便只发送新句子(单词)(如上面的示例,只发送 5 个新字符,或者,至少只发送 1005 个字符)。

我尝试过的方法是:(使用regex.trim()length

  1. 检测空白;
  2. 检测 ',' 和 '.'
  3. 比较当前和前一个字符串的长度。

虽然我不知道这是否是最好的方法。

有没有更好的方法来检测<textarea> 中的单词/句子变化?


总结:虽然我不想考虑按时间更新,但它仍然是一个不错的考虑方式。 (检查所选答案)

【问题讨论】:

  • 请用 angular 而不是 angularjs 标记 angular 2+ 问题。谢谢。
  • 去抖动怎么样?仅在几秒钟不活动后发送,可能与您提到的其他方法结合使用。检查 ngModelOptions。
  • 为什么不根据计时器而不是更改来做呢?

标签: javascript angular angular-cli


【解决方案1】:

一种技术是使用超时,它只允许每隔几秒或任何间隔发出一次请求

var timeoutFn;

function change() {
    console.log('change');
    clearTimeout(timeoutFn);
    timeoutFn = setTimeout(doApiRequest, 1000);
}

function doApiRequest() {
    console.log('apiRequest');
}

for(i = 0; i < 10; i++){
    change()
}

【讨论】:

    【解决方案2】:

    不知道我是否遗漏了什么,但我认为,检查输入的最后一个字符就足以检测一个单词。如果最后一个字符是字母([a-z]),则它不是单词;如果是其他内容,则它之前的内容直到最后一个非字母都是一个单词。

    对于句子,我认为检测'.'就足够了特点。你得到'.',你得到一个句子的结尾。直到前一个'.'的内容是你的句子。

    我知道这是非常基本的,但请随意添加。

    【讨论】:

      猜你喜欢
      • 2014-02-03
      • 1970-01-01
      • 2011-12-10
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多