gpt4 book ai didi

JavaScript | Angular | Controller 作为语法 : Cannot Use `this`

转载 作者:行者123 更新时间:2023-11-30 09:47:20 25 4
gpt4 key购买 nike

不能使用 ControllerAs this

谁能给我解释一下下面的场景吗?

作品

ng-controller="Parent as thus"

休息

ng-controller="Parent as this"

使它成为关键字的那个字母——我想要的——破坏了森林。

这是为什么?

附言我知道 vm 约定,但我发现它扰乱了 Controller / View 模型的可移植性。

最佳答案

问题当然不是 this 是 JavaScript 中的保留字。controller as 语法中没有规则规定您需要将 this 的值分配给与 Controller 同名的变量,我敢肯定angular 也不会做这样的事情。为什么会这样?那将是对 Function 构造函数的极其愚蠢的使用,并且只是一个不必要的错误。

有一种简单的方法可以测试 JavaScript 保留字不是这里的问题。将您的 Controller 命名为“throw”。 “ parent 作为 throw ”throw 是一个保留字,但是它会throw 错误吗?不,那有用吗?是的。

但是,

this 在 Angular 自己的模板表达式的上下文中保留。它用于引用表达式的当前范围

<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);
};
});

上面的代码不会抛出错误,但它也不会记录 Controller 。相反,它将记录一个 scope 对象,其中包含 log 函数和 $parent 等等。

事实上,它还会包含一些我们感兴趣的东西:属性 this: Object,我们的 Controller 。

果然,将模板表达式更改为 {{log(this.this)}},它会很好地记录 Controller 实例。尽管如此,仍然不会使用 'this' 作为名称,它可能只会导致比未定义的函数更多的错误。

关于JavaScript | Angular | Controller 作为语法 : Cannot Use `this` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38315538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com