Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 事件处理函数不使用'this'关键字_Javascript_Angularjs_Web_Frontend - Fatal编程技术网

Javascript 事件处理函数不使用'this'关键字

Javascript 事件处理函数不使用'this'关键字,javascript,angularjs,web,frontend,Javascript,Angularjs,Web,Frontend,为什么我不能从事件处理程序中的这个关键字中获取数据?如何修复 twittyApp.factory('Unshown', function () { function Unshown() { this.allIsLoaded = false; this.loading = false; this.firstTime = true; this.scrollMarker = 100; this.loadedUnshownPages = 0; this.t

为什么我不能从事件处理程序中的
这个
关键字中获取数据?如何修复

twittyApp.factory('Unshown', function () {
function Unshown() {
    this.allIsLoaded = false;
    this.loading = false;
    this.firstTime = true;
    this.scrollMarker = 100;
    this.loadedUnshownPages = 0;
    this.timeLineHiader = $cookies.get("lastReadedTweetId");
}
window.onscroll = function () {
     //why here this.scrollMarker is undefined?
};
return Unshown;
});
这会改变吗

twittyApp.factory('Unshown', function() {

    var fact = {};

    function Unshown() {
        this.allIsLoaded = false;
        this.loading = false;
        this.firstTime = true;
        this.scrollMarker = 100;
        this.loadedUnshownPages = 0;
        this.timeLineHiader = $cookies.get("lastReadedTweetId");
    }

    var objUnShown = new Unshown();
    window.onscroll = function() {
        objUnShown.scrollMarker // aceess scrollmarker
    };

fact.Unshown =objUnShown;


    return fact.Unshown;
});
首先需要创建
UnShown
类的对象,然后才能访问它们的属性

编辑2: 如果您想在任何时候创建对象,您可以这样做

twittyApp.factory('Unshown', function() {

        var fact = {};

        function Unshown() {
             ..
        }

        window.onscroll = function() {
            objUnShown.scrollMarker // aceess scrollmarker
        };

    fact.Unshown =Unshown;


        return fact;
    });

 /// in controller do this.

 var objUnshown = new Unshown.Unshown()

通过在
unshawn
函数中使用
this
关键字,可以设置该函数对象的属性。要访问函数外部的属性,请在函数对象引用上使用属性访问器

twittyApp.factory('Unshown', function () {
function Unshown() {
    this.allIsLoaded = false;
    this.loading = false;
    this.firstTime = true;
    this.scrollMarker = 100;
    this.loadedUnshownPages = 0;
    this.timeLineHiader = $cookies.get("lastReadedTweetId");
}
window.onscroll = function () {
     //this.scrollMarker is undefined
     //
     //Use property accessor
     console.log(Unshown.scrollMarker);
};
return Unshown;
});

在AngularJS中使用
window.onscroll
使用
window.onscroll
是最有效的方法

在AngularJS中,使用添加事件侦听器


确保将
$window
添加到工厂函数的可注入项列表中。

将window.onscroll放在unshawn函数中如何访问onscroll中的这个.scrollMarker?'var scrold。。。。。。。如果(this.scrollMarker>scrolled&&!this.loading&&&!this.allIsLoaded){this.loading=true;}不是真的,您不必创建一个unshawn对象,只需跟踪“this”变量即可。就这些了,请贴上标签error@riyaj-khan您的解决方案是有效的,这是一个解决方案,但我在其他控制器的not构造函数中得到了另一个未经验证的结果Unshown(),但这不是问题。谢谢你,祝你好运!Oo,现在这个处理程序可以在每个页面上工作,它不好,它在登录页面中被压碎,之后就不能在主页上工作了。这个
事实
对象的意义是什么?
var windowElem = angular.element($window);

windowElem.on('scroll', function scrollListener (event) {
    console.log(event);
};