2016-08-07 12 views
0

Der folgende Code funktioniert wie erwartet und der scope.checked Wert wird in der Benutzeroberfläche normalerweise

.directive('comparisonSlider', 
    function() { 
     return{ 
      restrict: 'E', 
      templateUrl: '/app/reports/comparison-slider.html', 
      controller: function ($scope, $rootScope) { 
       $scope.checked = false; 
       $rootScope.$on('compare', 
         function() { 
          $scope.checked = true; 
         }, 
         true); 
      } 
     } 
    } 
) 

aber der folgende Code funktioniert auch reflektiert, aber die Änderungen an Der Bereich wird nicht in der Benutzeroberfläche angezeigt.

.directive('comparisonSlider', 
    function() { 
     return{ 
      restrict: 'E', 
      templateUrl: '/app/reports/comparison-slider.html', 
      controller: function ($scope, $rootScope) { 
       $scope.checked = false; 
       $rootScope.$on('compare', 
         function() { 
          $scope.checked = !$scope.checked; 
         }, 
         true); 
      } 
     } 
    } 
) 

Irgendwelche Ideen?

+0

Try $ log.info ($ scope.checked) in Funktion. Möglicherweise müssen Sie $ log service –

+0

injizieren Sie haben nicht viele Informationen zur Verfügung gestellt, aber '$ scope.checked' erstellt' checked' als eine primitive Eigenschaft auf '$ scope', die JavaScript-Vererbungsproblemen unterliegt . Dies schließt Probleme bei der Verwendung von "ng-repeat", "ng-include", "ng-if" oder anderen ähnlichen Anweisungen ein, was bedeutet, dass das Problem in Ihrem HTML-Code liegt. Wenn "checked" ein Objekt oder im Falle Ihrer Antwort eine Eigenschaft eines Objekts (des Controllers) ist, unterliegt es keinen Vererbungsproblemen. Siehe http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance-in-angularjs – Claies

Antwort

0

Dies funktioniert wie erwartet, nicht sicher, warum die andere nicht

.directive('comparisonSlider', 
    function() { 
     return{ 
      restrict: 'E', 
      templateUrl: '/app/reports/comparison-slider.html', 
      controllerAs: 'sliderCtrl', 
      controller: function ($scope, $rootScope) { 
       var self = this; 
       self.checked = false; 
       $rootScope.$on('compare', 
         function() { 
          self.checked = !self.checked; 
         }, 
         true); 
      } 
     } 
    } 
) 
0

Versuchen verändert sich:

self.checked = !self.checked; 

zu:

self.checked = false; 
+0

das funktioniert, und es war die Antwort, die ich zur Verfügung gestellt –