如何在点击事件中更改角度4属性?

时间:2017-10-17 16:24:38

标签: angular properties observable

我正在开发一个使用SVG库的角度应用程序。在我的组件中,我使用函数在ngAfterViewInit上启动画布加载。当我点击一个对象并且事件触发时,我正在尝试从函数调用中设置一个属性。

我创建了一个简单的plunker,我只想让属性'title'更改为新值。我尝试设置的'this.title'值的控制台日志具有新值,但视图不会更改。如何触发视图更改?

我认为这需要一个可观察的,但正如我所知,我对这个概念有点麻烦。提前致谢

import {Component, NgModule, ngOnInit, ngAfterViewInit} from '@angular/core'
import {BrowserModule} from '@angular/platform-browser'

declare var Snap: any;

@Component({
  selector: 'my-app',
  template: `<p>{{title}}</p><svg id="svg"></svg>

`,
})
export class App implements OnInit,AfterViewInit {
  title: string = "Old Title";



  constructor(){}

  ngOnInit(){

  }

  ngAfterViewInit(){
    this.initcanvas();
  } 

  initcanvas(){
    var title;
    var canvas = Snap("#svg");
    canvas.circle(25,25,20,20).attr({fill: "black"});
    canvas.click(function(e){ console.log('clicked');
                  title = "New Title";
                  this.title= title; 
                  console.log(this.title);
                  console.log(title);
                  canvas.circle(25,25,20,20).attr({fill: "red"}); })
    canvas.append();
  }
}

2 个答案:

答案 0 :(得分:2)

正如@LLai所提到的,问题是您正在.click()方法中构建一个具有包含范围的函数。将其从function()声明交换为箭头语法,以将函数的范围设置为整个组件:

canvas.click((e) => { console.log('clicked');
              title = "New Title";
              this.title= title; 
              console.log(this.title);
              console.log(title);
              canvas.circle(25,25,20,20).attr({fill: "red"}); }

这是你的working plunker分叉。

答案 1 :(得分:0)

您只需要仔细阅读文档。

http://snapsvg.io/docs/#Element.node 
https://plnkr.co/edit/hYKtZPzvSQehj3DKO5Et?p=preview