'this'在指令的回调中未定义

塞伯林克

我有一个处理文件上传的指令。该指令将'controller'和'controllerAs'用于动态控制器,并在'link'函数中触发在相关动态控制器中执行的回调。

问题是当回调在控制器执行时,“这个”未定义。如何在控制器中设置imageUrl?

指示:

.directive('attachable', function(FileUploader) {
return {
  restrict    : 'E',
  transclude  : true,
  templateUrl : 'template.html',
  scope       : {},
  controller  : '@',
  controllerAs: 'uploadCtrl',
  name        : 'controller', 

  link: function(scope, element, attrs) {

      var controller = scope.uploadCtrl;

      var uploader = scope.uploader = new FileUploader({
          url: controller.uploadUrl
      });

      // callbacks
      uploader.onAfterAddingFile = function(item) {
            controller.onAfterAddSuccess();
      };
   }
  };
});

控制器:

angular.module('core').controller('controller', ['$window', function($window){

    this.onAfterAddSuccess = function(item){

        if ($window.FileReader) {
            var fileReader = new FileReader();
            fileReader.readAsDataURL(item._file);

            fileReader.onload = function (fileReaderEvent) {
                $timeout(function () {
                    this.imageURL = fileReaderEvent.target.result;  // <- this is undefined
                }, 0);
            };
        }
    };
}]);        

的HTML:

<attachable controller="controller" ></attachable>  

编辑:

ste2425的答案解决了“未定义”错误,但是为什么在我的控制器(即视图)之外无法使用imageURL的新值?

更新的控制器:

...
fileReader.onload = function (fileReaderEvent) {

    this.imageURL = '';
    $timeout(function(){
        this.imageURL = fileReaderEvent.target.result;
    }.bind(this), 1);
};
...

的HTML:

imageURL: {{ imageURL }}     <- this is still ''
<attachable controller="controller" ></attachable>  
ste2425

Angular会将thisof$timeout设置为窗口。

您有几种选择。任何一个:

绑定函数的以下上下文:

    this.test = 'hiya';

   $timeout(function(){
        console.log('this WONT fail', this.test);
    }.bind(this), 1);

或正在使用角度v1.4.1或更高版本

   $timeout(function(ctx){
        console.log('this WONT fail', ctx.test);
    }, 1, true, this);

看到小提琴:http : //jsfiddle.net/wopx3rtc/1/

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在get请求中调用时,回调返回未定义的

来自分类Dev

ajax“未定义回调”错误

来自分类Dev

$ .getJSON在IE9及以下版本中返回未定义的成功回调

来自分类Dev

this.some_property在匿名回调函数中变为未定义

来自分类Dev

茉莉测试中未定义AngularJS $ scope。$ watch回调函数参数

来自分类Dev

requirejs回调未定义

来自分类Dev

WebSQL错误回调中的“无法读取未定义的属性'消息'”

来自分类Dev

Uncaught TypeError:无法读取jQuery回调函数中未定义的属性“ split”

来自分类Dev

array_filter回调函数中的未定义变量

来自分类Dev

为什么在回调中传递的值返回未定义?

来自分类Dev

传递回Angular中的回调的数据未定义

来自分类Dev

在get请求中调用时,回调返回未定义的

来自分类Dev

在回调方法中未定义RequireJS依赖项

来自分类Dev

为什么回调未定义?

来自分类Dev

匿名函数在回调中给出“未定义不是函数”

来自分类Dev

在异步函数中的回调参数上获取未定义的错误

来自分类Dev

模态返回指令中未定义

来自分类Dev

在dropzone.js成功回调中获取“文件:未定义”

来自分类Dev

在async.waterfall方法中未定义的回调

来自分类Dev

流星集合findOne在回调中返回时未定义

来自分类Dev

角度指令中未定义的功能

来自分类Dev

TypeError:this._url在Dojo FilteringSelect onChange回调中未定义

来自分类Dev

ES6 + Angular Controller类,在回调中未定义此类

来自分类Dev

局部变量在javascript的回调函数中变为未定义

来自分类Dev

Karma 回调始终未定义

来自分类Dev

迭代全局对象的键尝试在异步回调中访问未定义的变量

来自分类Dev

节点js中的“回调未定义”

来自分类Dev

“this”在wepay回调关闭器中返回未定义

来自分类Dev

$.getJSON 回调函数未定义

Related 相关文章

  1. 1

    在get请求中调用时,回调返回未定义的

  2. 2

    ajax“未定义回调”错误

  3. 3

    $ .getJSON在IE9及以下版本中返回未定义的成功回调

  4. 4

    this.some_property在匿名回调函数中变为未定义

  5. 5

    茉莉测试中未定义AngularJS $ scope。$ watch回调函数参数

  6. 6

    requirejs回调未定义

  7. 7

    WebSQL错误回调中的“无法读取未定义的属性'消息'”

  8. 8

    Uncaught TypeError:无法读取jQuery回调函数中未定义的属性“ split”

  9. 9

    array_filter回调函数中的未定义变量

  10. 10

    为什么在回调中传递的值返回未定义?

  11. 11

    传递回Angular中的回调的数据未定义

  12. 12

    在get请求中调用时,回调返回未定义的

  13. 13

    在回调方法中未定义RequireJS依赖项

  14. 14

    为什么回调未定义?

  15. 15

    匿名函数在回调中给出“未定义不是函数”

  16. 16

    在异步函数中的回调参数上获取未定义的错误

  17. 17

    模态返回指令中未定义

  18. 18

    在dropzone.js成功回调中获取“文件:未定义”

  19. 19

    在async.waterfall方法中未定义的回调

  20. 20

    流星集合findOne在回调中返回时未定义

  21. 21

    角度指令中未定义的功能

  22. 22

    TypeError:this._url在Dojo FilteringSelect onChange回调中未定义

  23. 23

    ES6 + Angular Controller类,在回调中未定义此类

  24. 24

    局部变量在javascript的回调函数中变为未定义

  25. 25

    Karma 回调始终未定义

  26. 26

    迭代全局对象的键尝试在异步回调中访问未定义的变量

  27. 27

    节点js中的“回调未定义”

  28. 28

    “this”在wepay回调关闭器中返回未定义

  29. 29

    $.getJSON 回调函数未定义

热门标签

归档