不用angularjs污染全局

Umu*_*acı 22 javascript angularjs

在angularjs中,我们将控制器定义为window.虽然这不会与其他js模块和插件创建名称冲突,但它仍然不是一个好习惯:单个应用程序应该将单个对象暴露给全局命名空间.

这是通常的方式,定义window如下:

function UserController($scope) { ... }
Run Code Online (Sandbox Code Playgroud)

HTML:

<div ng-controller="UserController">
Run Code Online (Sandbox Code Playgroud)

这就是我的想法:

myApp.UserController = function ($scope) { ... };
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,我应该像这样从html启动控制器

<div ng-controller="myApp.UserController">
Run Code Online (Sandbox Code Playgroud)

你怎么看?

Hen*_*jie 22

其中一种方法是在Angular中定义它,例如你描述的方式.换一种说法:

angular.module('YourApp').controller('ControllerName', function($scope) {})

我已经确认上面的方法不会污染全局命名空间.

编辑:您也不需要使用,<div ng-controller="myApp.UserController">因为您可以在属性ng-app中定义myApp:<body ng-app="myApp">这样您就可以在不使用myApp前缀的情况下调用ng-controller.