【问题标题】:angular access variable inside a function函数内的角度访问变量
【发布时间】:2018-03-16 14:39:16
【问题描述】:

我是角度新手。我不知道如何访问函数()中的变量。这是我的代码

  mergeImages() {
    var imgurl;
    var canvas: HTMLCanvasElement = this.canvas.nativeElement;
    var context = canvas.getContext('2d');


    let img1 = new Image();
    let img2 = new Image();

    img1.onload = function() {
      canvas.width = img1.width;
      canvas.height = img1.height;
      context.globalAlpha = 1.0;
      img2.src = '../assets/sun.jpg';
    };
    img2.onload = function() {
      context.globalAlpha = 1;
      context.drawImage(img1, 0, 0);
      context.globalAlpha = 0.5; //Remove if pngs have alpha
      context.drawImage(img2, 0, 0);

       imgurl = canvas.toDataURL("image/jpg");
      //console.log(imgurl)

    };
    img1.src = '../assets/moon.jpg';


     }

现在我需要从另一个方法访问“imgurl”

 printvalue(){
   need to access imgurl
}

edit 1 - 问题是 angular 在 printvalue() 上找不到 var a 它只能在 function something()

内工作

【问题讨论】:

  • 你用过打字稿吗
  • 是的,我正在使用打字稿
  • 局部变量与全局变量?我认为这不是角度/打字稿问题。
  • 请看我更新的问题

标签: angular typescript


【解决方案1】:

你想在这里创建一个范围变量并访问整个组件, 在 angularJS 早期,有一个 $scope 变量,您可以在其中访问该变量,在最新的 Angular 版本中,您需要使用 this 访问整个变量。

所以你需要尝试

     imgurl : string;
mergeImages() {

    var canvas: HTMLCanvasElement = this.canvas.nativeElement;
    var context = canvas.getContext('2d');


    let img1 = new Image();
    let img2 = new Image();

    img1.onload = () => {
      canvas.width = img1.width;
      canvas.height = img1.height;
      context.globalAlpha = 1.0;
      img2.src = '../assets/sun.jpg';
    };
    img2.onload = () => {
      context.globalAlpha = 1;
      context.drawImage(img1, 0, 0);
      context.globalAlpha = 0.5; //Remove if pngs have alpha
      context.drawImage(img2, 0, 0);

       this.imgurl = canvas.toDataURL("image/jpg");
      //console.log(imgurl)

    };
    this.img1.src = '../assets/moon.jpg';


     }

【讨论】:

  • 问题是 angular 在 printvalue() 上找不到 var a 它只在函数 something() 中工作
  • 将值分配给 a 时使用 this.a = 20 @StephenReynolds
  • @StephenReynolds 你也在 dosomething 函数中声明一个变量,你需要全局声明它。检查我的更新答案
  • 其实已经尝试了所有这些方法但没有成功我将删除此问题并使用原始代码重新发布。无论如何感谢您抽出宝贵的时间来回答我的问题:)
  • ok stackoverflow 不允许我删除它。所以我会编辑这个问题
【解决方案2】:

像这样转换你的代码

let imgurl;
mergeImages() {

    var canvas: HTMLCanvasElement = this.canvas.nativeElement;
    var context = canvas.getContext('2d');


    let img1 = new Image();
    let img2 = new Image();

    img1.onload = () => {
      canvas.width = img1.width;
      canvas.height = img1.height;
      context.globalAlpha = 1.0;
      img2.src = '../assets/sun.jpg';
    };
    img2.onload = () => {
      context.globalAlpha = 1;
      context.drawImage(img1, 0, 0);
      context.globalAlpha = 0.5; //Remove if pngs have alpha
      context.drawImage(img2, 0, 0);

       this.imgurl = canvas.toDataURL("image/jpg");
      //console.log(imgurl)

    };
    this.img1.src = '../assets/moon.jpg';


     }

【讨论】:

  • 问题是 angular 在 printvalue() 上找不到 var a 它只在函数 something() 中工作
  • @anas 首先感谢您抽出宝贵的时间来回答我的问题。当我试图声明 letimgurl 时;我的 ide 在“let”下给出错误,说“预期有构造方法或 accseor 或属性”
  • @StephenReynolds 你用过函数关键字吗?它不应该在角度中使用
  • 是的,我首先使用了它,但后来我在你发布的时候改变了它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-04-29
  • 2016-06-27
  • 2018-12-02
  • 1970-01-01
  • 2018-06-23
  • 2018-06-28
相关资源
最近更新 更多