AngularJSJS 写法详解
AngularJS 作为一款经典的前端 JavaScript 框架,以其数据双向绑定、依赖注入和模块化设计等特点,在 Web 开发领域占据了一席之地,掌握 AngularJS 的正确写法,不仅能提升开发效率,还能确保代码的可维护性和可扩展性,本文将从核心概念、模块定义、控制器编写、数据绑定、服务使用及路由配置等方面,详细介绍 AngularJS 的标准写法。

模块化与依赖注入
AngularJS 的核心思想之一是模块化,通过 angular.module 方法创建和引用模块,模块是应用程序的容器,可定义控制器、服务、指令等组件,依赖注入(DI)则允许组件声明所需依赖,由 AngularJS 自动注入,降低组件间的耦合度。
// 定义模块
var app = angular.module('myApp', []);
// 定义控制器并注入 $scope 服务
app.controller('MainController', ['$scope', function($scope) {
$scope.message = 'Hello, AngularJS!';
}]); 注意事项:
- 模块名称应与 HTML 中的
ng-app指令值一致。 - 依赖注入推荐使用数组语法(如
['$scope', function($scope) {...}]),避免代码压缩后因变量名改变导致依赖失效。
控制器与数据绑定
控制器是 AngularJS 中处理业务逻辑的核心,通过 $scope 对象实现视图与数据的双向绑定。$scope 是视图与控制器之间的桥梁,其属性和方法可直接在模板中使用。
示例:
app.controller('UserController', ['$scope', function($scope) {
$scope.user = {
name: 'John Doe',
email: 'john@example.com'
};
$scope.updateUser = function() {
console.log('User updated:', $scope.user);
};
}]); 模板中的绑定:
<div ng-controller="UserController">
<p>Name: {{user.name}}</p>
<p>Email: <input type="text" ng-model="user.email"></p>
<button ng-click="updateUser()">Update</button>
</div> 关键点:
ng-model用于双向绑定表单输入与数据模型。- 或
ng-bind用于显示数据,推荐后者以避免页面加载时的闪烁问题。
服务与数据交互
AngularJS 提供了内置服务(如 $http、$timeout、$log),也支持自定义服务,服务是单例对象,适合封装可复用的逻辑(如 API 请求、数据缓存)。

内置服务示例:
app.controller('DataController', ['$scope', '$http', function($scope, $http) {
$http.get('/api/users')
.then(function(response) {
$scope.users = response.data;
})
.catch(function(error) {
console.error('Error fetching data:', error);
});
}]); 自定义服务:
app.service('UserService', [function() {
this.getUsers = function() {
return [{id: 1, name: 'Alice'}, {id: 2, name: 'Bob'}];
};
}]);
app.controller('UserController', ['$scope', 'UserService', function($scope, UserService) {
$scope.users = UserService.getUsers();
}]); 最佳实践:
- 服务优先使用
.service()或.factory()方法定义,前者通过构造函数注入,后者通过工厂函数返回。 - 避免在控制器中直接操作 DOM,将 DOM 操作封装为指令。
指令与自定义组件
指令是 AngularJS 扩展 HTML 的方式,可创建自定义标签或属性(如 ng-repeat、ng-if),通过 directive() 方法可定义复杂交互逻辑。
示例:自定义指令实现按钮点击计数器
app.directive('clickCounter', [function() {
return {
restrict: 'A', // 属性形式
scope: {
count: '='
},
link: function(scope, element, attrs) {
element.on('click', function() {
scope.count++;
scope.$apply(); // 手动触发 digest 循环
});
}
};
}]);
// 使用指令
<div click-counter count="counter"></div> 指令类型:
| 限制方式 | 说明 | 示例 |
|———-|—————|—————|
| E | 元素标签 | <my-directive></my-directive> |
| A | 属性 | <div my-directive></div> |
| C | CSS 类名 | <div class="my-directive"></div> |
| M | HTML 注释 | <!-- directive: my-directive --> |
路由与多视图管理
通过 ngRoute 模块可实现单页应用(SPA)的路由功能,根据 URL 切换视图。

配置路由:
app.config(['$routeProvider', function($routeProvider) {
$routeProvider
.when('/home', {
templateUrl: 'views/home.html',
controller: 'HomeController'
})
.when('/about', {
templateUrl: 'views/about.html',
controller: 'AboutController'
})
.otherwise({redirectTo: '/home'});
}]); 模板示例:
<!-- 主页面 --> <div ng-view></div>
注意事项:
- 需引入
angular-route.js文件并依赖'ngRoute'模块。 - 路由模板路径应基于 HTML 文件所在目录。
AngularJS 的写法遵循“声明式编程”理念,通过模块化、依赖注入和数据绑定简化开发流程,良好的实践包括:
- 合理划分模块,避免单一模块职责过重。
- 控制器仅处理视图逻辑,复杂业务逻辑交由服务或工厂。
- 使用指令封装可复用的 UI 组件。
- 路由配置清晰,支持懒加载提升性能。
尽管现代前端框架(如 Angular、React)已更流行,但 AngularJS 的设计思想仍具参考价值,掌握其核心写法,有助于理解前端框架的演进逻辑。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/56630.html




