【问题标题】:javascript variable scope binding using angularjs使用angularjs的javascript变量范围绑定
【发布时间】:2017-11-10 02:46:55
【问题描述】:

我正在使用 angularjs/javascript 代码进行图像上传,但我陷入了变量绑定,谁能帮助我,这是我的代码。

var image_source;
$scope.uploadedFile = function(element) {
  reader.onload = function(event) {
  image_source = event.target.result;
  $scope.$apply(function($scope) {
    $scope.files = element.files;
  });
}
console.log(image_source,event.target.result, element.files[0],  "***not working here***");

我在函数内绑定了名为image_source 的变量,但是当我在函数外访问它时,它总是返回未定义的为什么?

PS:- 我可以使用phatarrow operator 在打字稿中得到这个,但我不知道如何在 javascript 中做

【问题讨论】:

  • 你在哪里声明了 image_source??
  • 尝试在范围之外声明它
  • 我已经在函数外声明了
  • 文件操作是异步操作。您在 onload 方法中为 image_source 赋值。这可能是不工作的原因
  • 它的函数范围,不知道你为什么期望它可以在外部访问。 fat-arrow 函数获取父块的范围,因此它可能在 es6 中工作。你期待 es5 中的块作用域吗?那行不通。

标签: javascript angularjs


【解决方案1】:

如果你的console.log语句在$scope.uploadedFile之前被调用,很有可能是这样,值不会被设置,我建议你尝试调用该函数并将你的console.log语句放在末尾函数,在块内。

这不是角度问题,而是更像 javascript,当你声明一个匿名函数时,它不会立即被调用

let mynumber = 1
let myfunction = () => { 
    mynumber = 2
}
console.log(mynumber) // 1
myfunction()
console.log(mynumber) // 2

【讨论】:

  • 是的,我知道,但在某些情况下我必须在功能之外进行安慰
  • 我不确定它是否有用,我假设您在此处显示的文件块是您的控制器?您只是不能将控制台日志语句放在函数设置值之前,然后期望它被设置
  • 那我该怎么办?
  • 这取决于您想要达到的目标,如果您的 console.log 语句仅用于在设置变量时检查变量的值,那么只需放置一个调试器语句并在浏览器中检查它
  • 但控制台语句总是在函数之前运行,那么在这种情况下该怎么办?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-03
  • 2015-02-20
  • 2013-06-05
相关资源
最近更新 更多