当前位置: 首页 > 面试题库 >

JavaScript | 角度| 控制器作为语法:不能使用`this`

帅博简
2023-03-14
问题内容

无法使用ControllerAs this

有人可以向我解释以下情况吗?

作品

ng-controller="Parent as thus"

休息时间

ng-controller="Parent as this"

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

为什么是这样?

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

以上不会引发错误,但是也不会记录控制器。相反,它将记录一个包含该函数的 作用域 对象以及不包含该对象的 作用域 对象log``$parent

实际上,它还包含一些对我们来说有趣的东西:property this: Object,我们的控制器。

确实,将模板表达式更改为{{log(this.this)}},它将很好地记录控制器实例。不过仍然不会使用'this'它的名字,它可能会比未定义的函数错误地导致更多错误。



 类似资料:
  • 问题内容: 我需要将变量传递给另一个控制器。我有以下与ListCtrl相关的代码: 链接将转到另一个控制器ItemCtrl。 我想将变量传递给ItemCtrl。我想到了使用一个名为SharedProperties的服务: 单击链接后,我将调用角度单击事件以触发以下功能: 但是,ng-click似乎并没有改变我共享属性的值… 更新 我在ng-click触发的函数中放置了一个警报,并且警报应该被触发。

  • 问题内容: 使用语法时如何订阅属性更改? 问题答案: 只需绑定相关上下文即可。 示例:http://jsbin.com/yinadoce/1/edit 更新: Bogdan Gersak的答案实际上是等效的,两个答案都尝试在正确的上下文中进行绑定。但是,我发现他的答案更干净。 话虽如此,首先,您必须了解其背后的基本思想。 更新2: 对于那些使用ES6的人,通过使用它们可以获得具有正确上下文OOTB

  • 问题内容: 我试图弄清楚控制器继承是如何工作的。我有三个控制器: 和我的看法 但它们都显示“主要”。我该如何解决? 这是一个小提琴http://jsfiddle.net/g3xzh4ov/3/ 问题答案: 这是一个如何在Angular中扩展控制器的示例。 它要求使用,它取代有,它是这样的情况特别好。 注意,它是在幕后使用的,而不是其他Angular服务类型的用法,因此可以将语句从控制器直接带到单独

  • 问题内容: 如果我有一个实用函数,我希望能够从我的声明内的任何地方调用。是否可以在模块设置中使它全局访问,还是需要将其添加到每个控制器的作用域中? 问题答案: 基本上,您有两个选择,要么将其定义为服务,要么将其放在根范围内。我建议您使用它来提供服务,以避免污染根范围。您创建一个服务,并使其在控制器中可用,如下所示: 如果那不是您的选择,则可以将其添加到根范围中,如下所示: 这样,您所有的模板都可以

  • 问题内容: Angular Controller中的方法很少,它们不在scope变量上。 有谁知道,我们如何在Jasmine测试中执行或调用这些方法? 这是主要代码。 现在,在我的茉莉花测试中,我们正在传递“ handleSuccessOfAPI”和“ handleFailureOfAPI”方法,但是这些是未定义的。 这是茉莉花测试代码。 问题答案: 因为您将无法使用这些功能。当您定义一个命名的J

  • 问题内容: 我在AngularJS应用程序中为i18n 使用angular-translate。 对于每个应用程序视图,都有一个专用的控制器。在下面的控制器中,我设置了要显示为页面标题的值。 码 的HTML 的JavaScript 我正在使用angular-translate-loader-url扩展名加载翻译文件。 问题 在初始页面加载时,将显示翻译键,而不是该键的翻译。翻译是,但我看到了。 第