Ich verwende eine Direktive, um zu überprüfen, wie viel der Benutzer das Fenster scrollt, aber ich kann nicht das Scope mit dem Controller binden.Binding directory scope mit Controller in AngularJS
Hier ist die Richtlinie und Controller-Code:
'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');
}
});
}
};
}]);
dies ist der Ansicht Code:
<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>
Nach Ansicht nicht definiert gescrollt wird. Wenn ich es im Controller definiere, kann ich es sehen, aber die Direktive kann ihren Wert nicht ändern. Grundsätzlich möchte ich in der Ansicht die Variable "scrollen", die den Wert gemäß der Richtlinie ändert.
Was fehlt mir?
Versuchen Sie $ $ scope. $ Apply() 'als letzte Anweisung des Scroll Event Handlers hinzuzufügen, so dass Angular über die Änderung informiert wird. (Besser noch, wickle den Inhalt des gesamten Handlers in '$ apply()'.) –
... all das vorausgesetzt, die console.logs werden gedruckt, dh der Event-Handler läuft tatsächlich –