2016-03-19 4 views
1

Ich lerne Dinge ein wenig rückwärts, weil ich von jquery zu angualrJs sprang, ohne wirklich Javascript zu lernen. Ich weiß etwas Javascript, aber ich bin auch sehr verloren, wie man es mit meinen Eckigen Projekten umsetzt. Mein derzeitiges Dilemma ist, dass ich versuche, Javascript in einem Controller zu verwenden, um nach links oder rechts zu scrollen, wenn eine Schaltfläche in meiner Ansicht eingeblendet wird.Scrollen Sie nach rechts mit AngularJS und Javascript

Meine Javascript-Funktion in meinem Controller ist wie folgt.

(function() { 
    'use strict'; 

    angular 
    .module('bhamDesign') 
    .controller('GalleryController', GalleryController); 


    /** @ngInject */ 
    function GalleryController($scope, $stateParams, $http) { 

    var vm = $scope; 

     $http.get('assets/json/galleries/' + $stateParams.mainId + '.json').success(function(data) { 
     vm.gallery = data; 
     }); 

     vm.toggle = false; 

     vm.imageLightbox = function (image) { 
      vm.toggle=!vm.toggle; 
      vm.imageSingle = image; 
     }; 

     vm.scrollLeft = function(){ 
     getElementsByClassName('img-container').scrollLeft += 20; 
     }; 

     vm.scrollRight = function(){ 
     getElementsByClassName('img-container').scrollRight += 20; 
     }; 

    } 

})(); 

und es wird aus der Sicht wie so genannt.

<i id="scroll-left" ng-mouseover="scrollLeft()" class="fa fa-angle-left"></i> 
<i id="scroll-right" ng-mouseover="scrollRight()" class="fa fa-angle-right"></i> 

<div class="img-container"> 
    <img ng-src="{{image}}" ng-repeat="image in gallery.images" ng-click="imageLightbox(image)"> 
</div> 

Ich fühle mich wie das Element aus dem DOM in meine Javascript-Funktion, um verlangen, damit er korrekt arbeiten, aber ich bin ein wenig verloren, was ich gerade tue. Kann mir jemand helfen, die Punkte zu verbinden?

+0

Sie vermissen einen Verweis auf Ihr Scope-Objekt können Sie die vollständige Datei veröffentlichen? es würde außerhalb des Elements auf dem Umfang gefunden werden. –

+0

auch dies ist nicht die Art und Weise, wie ich die sekundäre Funktion einrichten würde. –

+0

Es tut mir leid, ich bin mir nicht sicher, was Sie mit dem Scope-Objekt meinen. Ich habe meinen Controller an meine Route mit UI-Router angeschlossen, wenn Sie das fragen. Darf ich fragen, wie Sie eine sekundäre Funktion einrichten würden? Ich lese, dass Sie Ihren Controller js nicht mit JavaScript durcheinander bringen sollten, ich kenne einfach keine bessere Praxis. – Jleibham

Antwort

1

Ich habe das nicht getestet, aber diese Richtung kann besser für Sie sein. Ich habe deinen Controller in eine Direktive umgewandelt. Möglicherweise müssen Sie auch eine HTML-Vorlage erstellen. Aber seine Macht könnte auch funktionieren.

(function() { 
    'use strict'; 

    function galleryDirective($stateParams, $http, $document) { 
     /** @ngInject */ 
     function controller($scope) { 
     } 

     function link($scope) { 
      var $$document = angular.element($document); 

      $http.get('assets/json/galleries/' + $stateParams.mainId + '.json').success(function(data) { 
       $scope.gallery = data; 
      }); 

      $scope.toggle = false; 

      $scope.imageLightbox = function (image) { 
       $scope.toggle=!$scope.toggle; 
       $scope.imageSingle = image; 
      }; 

      vm.scrollLeft = function(){ 
       $$document.getElementsByClassName('img-container').scrollLeft += 20; 
      }; 

      vm.scrollRight = function(){ 
       $$document.getElementsByClassName('img-container').scrollRight += 20; 
      }; 
     } 

     return { 
      controller: controller, 
      link: link, 
      scope: { 

      } 
     } 
    } 

    angular 
      .module('bhamDesign') 
      .directive('galleryDirective', ['$stateParams', '$http', '$document', galleryDirective]); 

})(); 

<gallery-directive> 

    <i id="scroll-left" ng-mouseover="scrollLeft()" class="fa fa-angle-left"></i> 
    <i id="scroll-right" ng-mouseover="scrollRight()" class="fa fa-angle-right"></i> 

    <div class="img-container"> 
     <img ng-src="{{image}}" ng-repeat="image in gallery.images" ng-click="imageLightbox(image)"> 
    </div> 

</gallery-directive> 
+0

Das scheint Sinn zu machen. Leider funktioniert es nicht. – Jleibham

+0

Ich denke, die document.getElementByClass wird nicht als eine Funktion registriert. – Jleibham

+0

ist diese Funktion in einer Direktive? –

Verwandte Themen