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

全局定义的AngularJS控制器和封装

印晋
2023-03-14
问题内容

根据AngularJS的教程,控制器功能只是位于全局范围内。

http://docs.angularjs.org/tutorial/step_04

控制器功能本身是自动解析为封装范围还是驻留在全局范围内?我知道他们已经传递了对自己的$
scope的引用,但是看来函数本身只是位于全局范围内。显然,这可能会带来很多问题,而且我已经通过经验和教育学到了封装的方法。此外,如果它们确实存在于全球范围内,将它们封装在这样的要引用的对象中是否不是最佳实践?


    Object.functionName();

而不是这样:

    functionName();

以防止因全球范围的污染而发生的问题(即,覆盖功能等)。


问题答案:

AngularJS支持两种注册控制器功能的方法-
作为全局可访问的功能(您可以在上述教程中看到此形式)或作为模块的一部分(形成一种名称空间)。有关模块的更多信息,请参见:http
:
//docs.angularjs.org/guide/module,但总而言之,可以在模块中注册一个控制器,如下所示:

angular.module('[module name]', []).controller('PhoneListCtrl', function($scope) {

  $scope.phones = [..];

  $scope.orderProp = 'age';
});

AngularJS在许多示例中都使用了一种简短的全局函数声明控制器的形式,但是尽管 这种形式适合用于快速采样,但是它不应该在实际应用中使用

简而言之:AngularJS使得正确封装控制器功能成为可能,但也公开了一种将它们声明为全局函数的简单,快速和肮脏的方式。



 类似资料:
  • 问题内容: 我正在使用angularjs编写示例应用程序。我在chrome浏览器上遇到以下错误。 错误是 错误:[ng:areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined 呈现为 参数“ ContactContr

  • 问题内容: 我正在使用angularjs编写示例应用程序。我在chrome浏览器上遇到以下错误。 错误是 错误:[ng:areq] http://errors.angularjs.org/1.3.0-beta.17/ng/areq?p0=ContactController&p1=not%20a%20function%2C%20got%20undefined 呈现为 参数“ ContactContr

  • 我想要一些关于如何实现以下目标的建议。我不提供代码,因为我的问题是理论上的,但应要求我可以。所以情况是这样的: 我有多个控制器,每个控制器都可以抛出XYException 我有一个@ControllerAdvice类,其中有一个@ExceptionHandler监视XYExceptions。当它发生时,它打印出“xy”。 在一个(且仅有一个)控制器中,当抛出XYException时,我希望执行一些

  • 控制器定义 ThinkCMF5的控制器完全按 TP5的控制器用法来,但 CMF 封装了几个重要控制器基类,为了更方便开发者,我们建议如果没有特殊需求,自己创建的控制器请最好继承一个基类控制器; 用于 WEB 项目的基类控制器有四个,分别是:BaseController,HomeBaseController,UserBaseController,AdminBaseController 继承关系 th

  • 控制器定义 ThinkCMF6.0的控制器完全按 TP6.0的控制器用法来,但 CMF 封装了几个重要控制器基类,为了更方便开发者,我们建议如果没有特殊需求,自己创建的控制器请最好继承一个基类控制器; 用于 WEB 项目的基类控制器有四个,分别是:BaseController,HomeBaseController,UserBaseController,AdminBaseController, Re

  • 控制器定义 控制器文件通常放在application/module/controller下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)。 一个典型的控制器类定义如下: <?php namespace app\index\controller; use think\Controller; class Index extends Controller { public fu