AngularJS:控制器/服务应该是Pascal案例吗? (在自耕农中使用Yo)

时间:2013-06-18 11:46:30

标签: angularjs yeoman

我已经开始使用Yo(yeoman)为angularjs搭建我的控制器,服务等。

我通常会做

  yo angular:service passwordService

我正在使用驼峰案例,因为这是它创建的文件的名称,但我注意到它也使用相同的名称作为服务的名称,所以

passwordService

而不是

PasswordService

这里的最佳做法是什么?

由于

2 个答案:

答案 0 :(得分:20)

值得注意的是,在许多地方的Developer Guide(包括链接到“服务”部分)中,AngularJS开发人员使用camelcase +第一个小写来表示服务名称和其他内容。所以也许你会认为这是AngularJS的最佳实践。

也就是说,我认为从其他语言来看,更常见的是使用camelcase +第一个大写命名服务和类,实际上在JavaScript中,这似乎是特别重要的。假设您有一个名为user的类 - 那么您将其称为包含user实例的变量?如果没有极其笨拙/容易出错的阴影,你就无法称之为user

在AngularJS中,您的$resource服务最终将成为您在旧版“OO JavaScript”中的类。看:

angular.module('Foo', [], function() {}).factory('User', function() {
  var User = $resource('/api/user');

  User.prototype.getFullName = function() {
    return this.firstName + ' ' + this.lastName;
  };

  return User;
});

看看我要去哪里?您最终将注入新的User $resource并实例化它:

function MyController($scope, User) {
  var someNewUser = new User();
};

或者您希望使用简单的var名称(例如user)为当前项目迭代多个用户:

angular.forEach(someUsers, function(user) {
  // Good thing you didn't name your $resource "user"!
  // Weird/undesirable shadowing would result here then...
});

如果您需要更多说明,为什么我认为在给定JavaScript上下文的情况下,对于类/服务名称,最佳实践首先是大写。 (相比之下,请考虑PHP var名称前缀为$,因此var名称和类名称之间不会发生阴影。$ User = new User()完全没问题。)

当然,你可以在JS中做User = new user(),但这与现有语言/风格指南的标准相反。

答案 1 :(得分:14)

对于Javascript约定,当且仅当相关函数是PascalCase函数时,才应使用constructor(即必须使用new调用。重要的是,它允许程序员知道必须使用new,否则this属性将被搞砸。

对于工厂和提供商等,您实际上应该使用camelCase约定。

更新

虽然我的初始声明仍然存在于Angular之外的JS环境中,但我现在认为最好将PascalCase用于注入变量。这已成为很长一段时间的惯例,不值得反击。由于注入的变量几乎总是单例并且是应用程序范围的,因此将它们与函数范围中创建的局部变量区分开来感觉是正确的。