Ответ 1
Проблема, безусловно, не, что this
является зарезервированным словом в JavaScript.
В контроллере нет правила в качестве синтаксиса, в котором говорится, что вам нужно будет присвоить значение this
переменной с тем же именем, что и контроллер, и я уверен, что angular тоже не сделает этого. Почему? Это было бы невероятно глупое использование конструктора Function
и просто ненужная ошибка.
Там простой способ проверить, что зарезервированные слова JavaScript здесь не проблема. Назовите ваш контроллер "throw". "Parent as throw"
. throw
является зарезервированным словом, но делает ли это ошибки? Нет. Это работает? Да.
this
, однако, зарезервировано в контексте angular собственных выражений шаблона. Он используется для обозначения текущего scope
выражения.
<div ng-controller="Parent as this">
{{log(this)}}
</div>
angular.module('testApp', []).controller('Parent', function($scope){
this.test = 'foo';
$scope.log = function(arg){
console.log(arg);
};
});
Вышеизложенное не будет вызывать ошибки, но оно также не будет регистрировать контроллер. Вместо этого он будет регистрировать объект области, содержащий функцию log
и $parent
, а что нет.
Фактически, он также будет содержать что-то интересное для нас: property this: Object
, наш контроллер.
И, конечно же, измените выражение шаблона на {{log(this.this)}}
, и он будет нормально копировать экземпляр контроллера. Все равно не использовал бы 'this'
как имя, но, вероятно, это просто вызвало бы больше ошибок по ошибке, чем когда-либо undefined.