【发布时间】:2016-05-23 10:54:22
【问题描述】:
我正在使用指令来检查用户滚动窗口的程度,但我无法将范围与控制器绑定。
这是指令和控制器代码:
'use strict';
angular.module('myApp.landing', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
}])
.controller('landingCtrl', ["$scope", function($scope) {
$scope.scrolled = false;
$scope.$on('$routeChangeSuccess', function() {
});
}]).
directive("scroll", ["$window", function($window){
return {
scope: false,
link: function($scope, element, attrs){
angular.element($window).bind("scroll", function(){
if (this.pageYOffset >= 150) {
$scope.scrolled = true;
console.log($scope.scrolled + 'Scrolled 100px');
} else {
$scope.scrolled = false;
console.log($scope.scrolled + 'Not scrolled enough');
}
});
}
};
}]);
这是视图代码:
<div ng-controller="landingCtrl" scroll>
<div class="row">
<div class="col-sm-12 col-md-9 landing-square">{{ scrolled }}</div>
<div class="col-sm-12 col-md-3 landing-square"></div>
....
</div>
在视图中滚动没有定义。如果我在控制器中定义它,我可以看到它,但指令不能改变它的值。基本上我想在视图中根据指令改变值的变量“滚动”。
我错过了什么?
【问题讨论】:
-
尝试添加
$scope.$apply()作为滚动事件处理程序的最后一条语句,以便 Angular 获知更改。 (更好的是,将整个处理程序的内容包装在$apply()中。) -
...所有这些都假设 console.logs 确实被打印了,即事件处理程序实际上正在运行
标签: javascript angularjs angularjs-directive scope