1

Я знаю, что подобные вопросы были заданы, и я прочитал ответы, но я до сих пор этого не понимаю, поэтому любая помощь будет оценена.

Код ниже работает. Однако, если я использовал $scope вместо this перед функциями bindTest и clickTest (строки 3 и 6), он не работает. Может ли кто-нибудь сказать мне, почему? Из того, что я прочитал, я бы ожидал, что здесь будет работать $scope.

С другой стороны, если я использую this вместо $scope перед тем offOrOn (строка 8), что делает не работу.

angular.module('myTestApp', []) 
 
     .controller('MyTestController', function($scope) { 
 
      this.bindTest = function() { 
 
      console.log("bindTest"); 
 
      }; 
 
      this.clickTest = function() { 
 
      console.log("clickTest"); 
 
      $scope.offOrOn = 'on'; 
 
      };  
 
     });
button { 
 
height:25px; 
 
width:25px; 
 
} 
 
.on { 
 
background-color:red; 
 
}
<body> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="myTestApp" ng-controller="MyTestController as tester"> 
 
<p ng-bind="tester.bindTest()"></p> 
 
<button ng-class="offOrOn" ng-click="tester.clickTest()"></button> 
 
</div> 
 
</body>

Кроме того, как в сторону, я пытался создать a fiddle, но он не работает, а DEV консоли Chrome говорит мне, что это не будет загружать модуль. Мне любопытно, что там не так. Но здорово, что stackoverflow теперь обеспечивает идентичную функцию, которая работает!

+0

Поскольку '$ scope' - это не то же самое, что' this', я задаюсь вопросом, откуда вы взяли идею, что обмен этими работами должен работать. – zeroflagL

ответ

1

Вы используете синтаксис controller as. Это означает, что все, добавленное к this, доступно с помощью tester., и все, что добавлено в $scope, может использоваться только (0) безtest..

Теперь должно быть понятно, почему this.offOrOn не работает: в вашем HTML вы не используете tester.offOrOn.

+0

Спасибо за быстрое просвещение, @zeroflagL! – user1147171

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