2016-08-07 5 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); 
      } 
     } 
    } 
) 

UIに反映されなく次のコードも動作しますが、変更されていますスコープはUIに反映されません。

.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

てみます$ log.info($をscope.checked)を関数内に追加します。あなたは$ logサービス –

+0

を注入する必要がありますが、多くの情報を提供していませんが、 '$ scope.checked'は' $ scope'のプリミティブプロパティとして 'checked'を作成します。これはJavaScript継承の問題。これには、 '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

を参照してください。これは私が提供した回答でした –