这篇文章将介绍如何使用AngularJS中的$resource
服务来创建RESTful API请求。我们将会在示例代码中提供一个简单的电影列表应用程序。
什么是 $resource?
$resource
是一个 AngularJS 内置的服务,它提供了一种简便的方式去与 RESTful APIs 进行交互。$resource
可以帮助你快速地定义出 $http
请求,并且可以自动处理数据的序列化和反序列化。
当你使用 $resource
时,你需要告诉它你的 API 的地址和路由规则。然后,你可以通过调用 $resource
实例上的方法去获取、创建、更新和删除数据。
创建一个 RESTful Service
首先,让我们创建一个能够与 movies
资源进行交互的 $resource
服务。
angular.module('movieApp', ['ngResource']) .factory('Movie', function($resource) { return $resource('/api/movies/:id', { id: '@_id' }, { update: { method: 'PUT' } }); });
在这个例子中,我们创建了一个名为 Movie
的 $resource
服务,并指定了路由规则 /api/movies/:id
。注意到传入的对象 { id: '@_id' }
中的 @
字符表示要从模型实例中获取该属性(即从 $resource
返回的对象)。
现在,我们可以通过 Movie.query()
方法来获取所有的电影列表,或是通过 Movie.get({ id: 1 })
来获取某个具体的电影。
在控制器中使用 $resource
接下来,我们需要在 AngularJS 控制器中使用 $resource
服务来实现一些功能。让我们设想,我们要创建一个可以列出、添加和删除电影的应用程序。
-- -------------------- ---- ------- -------------------------- --------------- ----------------- ------------------- - ------ ---------------------------- - --- ------ -- - ------- - ------- ----- - --- -- ------------------------------ ---------------- ------ - -- ------ ------------- - -------------- -- ----- --------------- - ---------- - --- ----- - --- ------- ------ --------------------- --------- ------------------------ ------------ -------------------------- --- ---------------------- - -------------------------- -------------------- - --- ----------------------- - --- -------------------------- - --- --- -- -- ---- ------------------ - --------------- - ------------------------ - --- ----- - ----------------------------- --------------------------- --- --- -- ---
在这个控制器中,我们注入了 Movie
服务,并且使用它来获取电影列表。我们还定义了一个函数 addMovie()
,将创建一个新的电影实例,并将其保存到服务器上。deleteMovie()
函数用于删除一个现有的电影实例。
示例应用程序
最后,让我们看一下完整的电影列表应用程序示例。请注意,这只是一个简单的示例,它所包含的功能并不完整。但是,它可以帮助你更好地理解如何使用 $resource
服务。
-- -------------------- ---- ------- --------- ----- ----- ------------------ ------ ----- ---------------- ---------------- --------- ------- --------------- ------- ------------------------------------------------------------------------------- ------- ---------------------------------------------------------------------------------------- ------- ---------------------- ------- ------ ---- -------------------------------- --------------- ------- - ----------------------------------------------------------- -------- ----------------------------------------------------------------------------------