【问题标题】:How to get span value in Angular 4 using onClick event in Angular 4如何使用 Angular 4 中的 onClick 事件在 Angular 4 中获取跨度值
【发布时间】:2018-09-05 10:58:45
【问题描述】:

我在一个 Angular 4 项目中工作,在这个项目中,我需要获取图像 Onclick 上 Span 标记中的值。 我提到了一些 Stackoverflow 问题,但对我没有任何帮助......

这是我的 HTML。

 <div class="col-sm-4">
     <div class="card">
         <div class="card-img-top card-img-top-250 one">
             <img  class="img-fluid" "src="assets/Images/Popular_Products/3.jpg" alt="img1">
             <img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/10.jpg" alt="img2" onclick="getProductName()" >
          </div>
          <div class="card-block pt-2">
              <div class="col-sm-12 text-center card-text">
                  <span #Pname> iPhone</span>
                  <br>
                  <br>
                  1500 $
              </div>
          </div>
      </div>
  </div>

这是我的 .ts 文件

getProductName(Pname: string) {
      this.http.get(`http://localhost:57036/api/data/CartCount/?ProductName=${Pname}`)
               .subscribe(data => this.res = (data['ITEM_QTY']),
                         error => console.error(error));       
} 

当我单击图像时,我想获取跨度标记中的值并将其传递给 API,但在我的情况下我无法获取跨度值。 我是 Angular4 的新手,请指导我解决这个问题。

【问题讨论】:

  • 如何将iPhone 放入span 中?不能用变量吗?
  • 目前是用户给定的静态值
  • 那么,某种输入?用户如何赋予该价值?

标签: angular


【解决方案1】:

你可以这样做:

在标记中:

<div class="col-sm-4">
    <div class="card">
        <div class="card-img-top card-img-top-250 one">
            <img  class="img-fluid" src="assets/Images/Popular_Products/3.jpg" alt="img1">
            <img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/10.jpg" alt="img2" (click)="getProductName(Pname)" >
        </div>
        <div class="card-block pt-2">
            <div class="col-sm-12 text-center card-text">
                <span #Pname> iPhone</span>
                <br>
                <br>
                1500 $
            </div>
        </div>
    </div>
</div>

在组件中:

getProductName(Pname: any) {
    console.log(Pname.textContent)
}

【讨论】:

  • 我只想通过点击图片来获取跨度值
  • Ketan Akbari ,通过使用你的建议,我得到了“未定义”作为输出
  • 图像和跨度标签在不同的 div 中,那么如何按跨度包装 div
  • @SivaM 也许你应该试试我的答案?
  • @KetanAkbari,非常感谢
【解决方案2】:
<img routerLink="/my-cart" class="..." src="..." onclick="getProductName()" >

首先,在您的图像标签中添加一个右斜杠。每个标签都应该关闭。
其次,您正在使用 Angular。如果您想要 Angular 上下文,请使用 Angular 语法。
第三,您的图像上不能有 routeLink 和点击处理程序。好吧,你可以,但你会遇到奇怪的行为。

这是您更新后的图片。

<img class="..." src="..." (click)="getProductName()" />

现在,您可以获得跨度值,并路由到您的路线。

getProductName() {
  const productName = this.Pname.nativelement.innerText;
  // Do what you want here, then route :
  this.router.navigate(['/my-cart']);
}

记住导入所需的依赖项,在构造函数中声明它们,并作为类成员。

import { Router } from '@angular/router';
import { ViewChild, ElementRef } from '@angular/core';

// ...

@ViewChild('Pname') Pname: ElementRef;

constructor(private router: Router) {}

【讨论】:

  • 再次猜测需要关闭的 img 标签:stackoverflow.com/questions/23890716/… ;)
  • 没有说禁止,只说允许。关闭它将为其他 inlnie 标签提供良好的实践。但是谢谢你,不知道!
  • @SivaM 您的代码没有显示。你有没有试过我说的,它有效吗?
【解决方案3】:

你需要在这里修改一些东西:

angular 的点击事件为:

<img routerLink="/my-cart" class="img-fluid two" src="assets/Images/Popular_Products/10.jpg" alt="img2" (click)="getProductName(Pname)" >

函数为:

getProductName(Pname: string) {
      let spanContent = <HTMLSpanElement>Pname.innerHTML;      
} 

【讨论】:

  • 1 - 你没有引用 Pname 2 - 如果你引用他,它是一个 ElementRef 对象。 3 - 如果它是 ElementRef 对象,则您没有 innerHTML 属性 4 - 您将文本转换为 HTMLSpanElement
  • 请先看代码,你可以看到我将 Pname 作为方法中的参数传递,然后确保它必须是一个跨度,然后将其转换为 HTMLSpanElement 并且仅供参考代码,如果你这么说,我可以分享 plunkr 吗?
  • 返回“未定义”
  • 调试时 let spanContent = Pname.innerHTML;这一行我在 innerHTML 中得到了“iPhone”,但悬停在 spanContent 上它是未定义的
  • 悬停?你想要鼠标悬停事件还是点击事件?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-11
  • 2018-01-31
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 2017-10-11
  • 2017-11-26
相关资源
最近更新 更多