Cod*_*ody 2 javascript this angularjs angularjs-controlleras
this任何人都可以向我解释以下场景吗?
ng-controller="Parent as thus"
Run Code Online (Sandbox Code Playgroud)
ng-controller="Parent as this"
Run Code Online (Sandbox Code Playgroud)
使它成为关键字的单个字母 - 我想要 - 破坏了森林。
为什么是这样?
PS 我知道这个vm约定,但我发现它干扰了控制器/视图模型的可移植性。
问题是肯定不会说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);
};
});
Run Code Online (Sandbox Code Playgroud)
以上不会抛出错误,但它也不会记录控制器。相反,它会记录一个包含函数和不包含什么的范围对象。log$parent
事实上,它还会包含一些我们感兴趣的东西: property this: Object,我们的控制器。
果然,将模板表达式更改为{{log(this.this)}},它会记录控制器实例就好了。尽管如此,仍然不会'this'用作名称,它可能只会导致比未定义函数更多的错误错误。
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |