繁体   English   中英

AngularJS指令的行为不符合预期?

[英]AngularJS directive not behaving as expected?

我有此指令,我正在尝试上班。 这是应该发生的事情。 在初始页面加载时,它将运行navCheck()函数。 如果location.path()==='/ index',则添加一些用于滚动更改的类。 如果location.path()不是'/ index'以外的其他任何东西,则应只为导航设置类,而不启用滚动。 我通过使用$ locationChangeSuccess在初始加载后完成此操作。 一切都按预期方式执行,但是即使location.path()不是“索引”,它仍会添加滚动绑定。 我想念什么?

.directive('changeClass', ['$window', '$location', '$rootScope',
    function ($window, $location, $rootScope) {
        var offset = "50";

        return {
            restrict: 'A',
            link: function(scope, element) {
                var navCheck = function() {
                    if ($location.path() === "/index") {
                        console.log('this path is index');
                        angular.element($window).bind("scroll", function () {
                            if (this.pageYOffset >= parseInt(offset)) {
                                element.removeClass("navbar-transparent");
                                element.addClass("navbar-primary")
                            } else {
                                element.addClass("navbar-transparent");
                                element.removeClass("navbar-primary")
                            }
                        });
                    } else {
                        console.log('anything other than index');
                        element.removeClass("navbar-transparent");
                        element.addClass("navbar-primary")
                    }
                };
                $rootScope.$on('$locationChangeSuccess', function() {
                    navCheck();
                    console.log('location changed')
                });
                navCheck();
            }
        };
    }])
.directive('changeClass', ['$window', '$location', '$rootScope',
    function ($window, $location, $rootScope) {
        var offset = "50";

        return {
            restrict: 'A',
            link: function(scope, element) {
                var indexOnScroll= function () {
                            if (this.pageYOffset >= parseInt(offset)) {
                                element.removeClass("navbar-transparent");
                                element.addClass("navbar-primary")
                            } else {
                                element.addClass("navbar-transparent");
                                element.removeClass("navbar-primary")
                            }
                        };
                var navCheck = function() {
                    if ($location.path() === "/index") {
                        console.log('this path is index');
                        angular.element($window).on("scroll",indexOnScroll);
                    } else {
                        console.log('anything other than index');
                        angular.element($window).off("scroll",indexOnScroll);
                        element.removeClass("navbar-transparent");
                        element.addClass("navbar-primary")
                    }
                };
                $rootScope.$on('$locationChangeSuccess', function() {
                    navCheck();
                    console.log('location changed')
                });
                navCheck();
            }
        };
    }])

您忘了在else情况下unbind与滚动的unbind 我更喜欢onoff不是bindunbind因为jQuery正式弃用了.on以外的所有绑定语法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM