2016-08-07 2 views
0

Следующий код работает, как ожидалось, и scope.checked значение отражается в пользовательском интерфейсе обычно

.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); 
      } 
     } 
    } 
) 

, но следующий код также работает, но изменения объем не отражен в пользовательском интерфейсе.

.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); 
      } 
     } 
    } 
) 

Любые идеи?

+0

Try $ log.info ($ scope.checked) в функции. Вам может понадобиться ввести $ log service –

+0

, вы не предоставили много информации для продолжения, но '$ scope.checked' создает' checked' как примитивное свойство в '$ scope', которое подвержено проблемам JavaScript Inheritance , Это включает проблемы с использованием внутри 'ng-repeat',' ng-include', 'ng-if' или других подобных директив, что означает, что проблема может быть в вашем HTML. Если 'checked' был объектом или в случае вашего ответа, свойство объекта (контроллера), то это не подлежит проблемам наследования. См. Http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance-in-angularjs – Claies

ответ

0

Это работает, как и ожидалось, не знаю, почему другой не

.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

Попробуйте изменить:

self.checked = !self.checked; 

к:

self.checked = false; 
+0

Это работает, и это был ответ, который я дал –

Смежные вопросы