JavaScript |角度 |控制器作为语法:不能使用“this”
JavaScript | Angular | Controller As Syntax: Cannot Use `this`
不能使用 ControllerAs this
谁能向我解释以下情况?
工程
ng-controller="Parent as thus"
休息
ng-controller="Parent as this"
那个使它成为关键词的字母 - 我想要 - 破坏了森林。
这是为什么呢?
附言我知道vm
约定,但我发现它扰乱了控制器/视图模型的可移植性。
问题当然不在于 this
是 JavaScript 中的保留字。控制器中没有规则作为语法说您需要将 this
的值分配给与控制器同名的变量,我确信 angular 也不会做这样的事情。为什么会这样?这将是对构造函数的非常愚蠢的使用Function
只是一个不必要的错误。
有一个简单的方法来测试JavaScript保留字不是这里的问题。将控制器命名为"投掷"。 "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
以及不包含的内容的范围对象。
事实上,它还将包含一些对我们来说有趣的东西: 属性this: Object
,我们的控制器。
果然,将模板表达式更改为{{log(this.this)}}
,它将很好地记录控制器实例。不过,仍然不会使用 'this'
作为名称,它可能只会错误地导致比未定义函数更多的错误。
不能使用 this
作为实例名称。 this
是一个保留关键字。
这相当于做:
var this = new Controller();
你可以看到这是错误的。它应该是这样的:
var ctrl = new Controller();
这本质上就是 angularJs 在幕后所做的controllerAs="Controller as ctrl"
相关文章:
- 使用this和onclick()时不能返回id值
- 为什么我不能在 ajax 成功中访问 $(this)
- 主干网在定义后不能立即使用 this.el
- this.push()可以处理PHP数据,但不能处理javascript数据
- 为什么调用array.prototype. foreach .call()时将数组设置为THIS对象不能工作?
- JQuery $(this)不能在函数参数中工作
- Javascript NoGray日历不能使用this.is_selectable()和onDateClick或onSe
- $this -不能找到正确的jQuery选择器
- 学习Backbone.js -不能转换'this.model'对象
- $(this).next()不能传递Resizable alsoResize
- 不能使用'this'调用方法
- 不能在jQuery中使用$this
- 不能得到onclick $(this).addClass来工作
- 为什么this.find()不能在我的插件中工作?
- 能不能帮我解释一下这个Javascript (angularjs代码)具体的“this”?
- Jquery不能识别$(this)
- onclick =“$ . post (this.href);返回false;“不能正常工作
- 不能使用this.ParentNode从HTML页面调用Google脚本
- jQuery插件回调$this不能返回元素
- $(this)不能作为onload事件处理程序