[英]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
。 我更喜欢on
和off
不是bind
和unbind
因为jQuery正式弃用了.on
以外的所有绑定语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.