Page 168 - AngularJS权威教程
P. 168

148  第 15 章  同外界通信:XHR 和服务器通信


                 将RestangularProvider注入到config()函数中,或者将Restangular注入到一个run()函
             数中,用这些方式对Restangular进行设置,无论在哪里使用Restangular都可以利用这些设置。

                     一个决定在何处设置Restangular实例的好方法:如果设置Restangular时需要用到其
                 他服务,那么就在run()方法中设置,否则就在config()中进行设置。

                 1. 设置 baseUrl

                 通过setBaseUrl()方法给所有后端 API  请求设置  baseUrl。例如,如果 API  的地址是
             /api/vi 而不是服务器的根路径,可以进行如下设置:

                 angular.module('myApp', ['restangular'])
                     .config(function(RestangularProvider) {
                         RestangularProvider.setBaseUrl('/api/v1');
                     });
                 2. 添加元素转换

                 Restangular加载了资源之后,我们可以添加资源转换器。
                 使用elementTransformers可以在Restangular对象被加载后为其添加自定义方法。

                 这个方法会在资源被加载后当作回调函数调用,在AngularJS对象中使用这些资源前可以对
             资源对象进行更新或修改。

                 angular.module('myApp', ['restangular'])
                     .config(function(RestangularProvider) {
                         // 3个参数:
                         // route
                         // 如果它是一个集合——布尔值(true/false)或者
                         // 如果你需要这两个选项以及变换器
                         // 则不发送
                         RestangularProvider.addElementTransformer('authors', false, function(element) {
                             element.fetchedAt = new Date();
                             return element;
                         });
                     });

                 对于扩展数据模型或集合有跨界方法可以使用。例如,如果我们只想更新authors资源,可
             以用如下方法:

                 angular.module('myApp', ['restangular'])
                     .config(function(RestangularProvider) {
                         // 3个参数:
                         // route
                         // 如果它是一个集合——布尔值(true/false)或者
                         // 如果你需要这两个选项以及变换器
                         // 则不发送
                         RestangularProvider.extendModel('authors', function(element) {
                             element.getFullName = function() {
                                 return element.name + ' ' + element.lastName;
                             };
                             return element;
                         });
                     });
   163   164   165   166   167   168   169   170   171   172   173