使用工厂的Angular.JS API

羊群道森

我已经编写了一个后端服务,该服务由Angular.JS前端使用工厂使用,如下所示:

angular.module('app.social', ['ngResource'])
    .factory('Social', function($http) {
        return {
            me: function() {
                return $http.get('http://localhost:3000/me');
            },
            likeVideo: function(link) {
                return $http.post('http://localhost:3000/like/video', { link : link });
            },
            post: function(link) {
                return $http.post('http://localhost:3000/post', { link : link });
            },
            postVideo: function(link) {
                return $http.post('http://localhost:3000/post/video', { link : link });
            },
            friends: function() {
                return $http.get('http://localhost:3000/friends');
            },
            taggableFriends: function() {
                return $http.get('http://localhost:3000/friends/taggable');
            },
            videos: function() {
                return $http.get('http://localhost:3000/videos');
            }
        };
    });

Social.me端点从REST后端接收配置文件信息。但是,此功能可用于各种Angular控制器(配置文件页面,项目详细信息页面,抬头帐户按钮等)。这意味着对于每个视图,都从http:// localhost:3000 / me请求配置文件信息这是好的做法,还是在工厂中缓存信息是更好的主意?


编辑:更新的代码(基于来自@Rebornix的答案):

angular.module('app.social', ['ngResource'])
    .service('SocialService', function() {
        var serviceData = {
            me: null
        };
        return serviceData;
    })
    .factory('Social', function($http, SocialService) {
        return {
            me: function() {
                if (SocialService.me === null) {
                    return $http.get('http://localhost:3000/me').then(function(response) {
                        SocialService.me = response.data;
                        return SocialService.me;
                    });
                } else {
                    return SocialService.me;
                }
            }
        }
    };
});

在控制器中,我使用:

angular.module('app.profile', [])
    .controller('ProfileCtrl', ['$window', '$scope', 'Social', function($window, $scope, Social) {
        $scope.me = Social.me();
    }])

和视图:

<div ng-controller="ProfileCtrl">
    <h1 class="profile-name">{{ me.name }}</h1>
</div>

但是,由于第一个请求初始化了Facebook.me值,因此视图未更新。我想我必须手动触发$ scope。$ apply()?

Rebornix

您可以将服务创建为跨控制器之类的存储

angular.module('app.social', ['ngResource'])
.service("SocialService", function() {
   var info = {
     me: null,
     friends: []
   };
   return info;
})
.factory('Social', function($http, SocialService) {
    return {
        me: function() {
               $http.get('http://localhost:3000/me').then(function(response){
               SocialService.me = response.data;
               });
        },

然后在所有控制器中,引用infoService而不是再次调用API。您需要获取最新数据并刷新infoService,所有控制器作用域都会收到此更改的通知。

在您的控制器中

angular.module('app.profile', [])
    .controller('ProfileCtrl', ['$window', '$scope', 'SocialService', 'Social', function($window, $scope, SocialService, Social) {
    $scope.SocialService = SocialService;
    // Kick off social factory to update user info, you can move it into 
    // any other functions like `ng-click`.
    Social.me();
}])

然后在您看来

{{SocialService.me}}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Angular JS视图中使用工厂对象?

来自分类Dev

Angular.js:在同一控制器上两次调用工厂

来自分类Dev

JS:使用工厂函数,您是否必须像在类中一样设置参数?

来自分类Dev

没有JSX的React.js-“警告:某些东西正在直接调用React组件。请使用工厂或JSX”

来自分类Dev

React.js 0.13-警告:某些东西正在直接调用React组件。使用工厂或JSX代替

来自分类Dev

无法使用Angular Js访问Restful API

来自分类Dev

使用Angular Js从API获取Json数据

来自分类Dev

如何使用Jasmine在Angular JS工厂中测试变量

来自分类Dev

如何在Angular JS的工厂/服务中使用$ cookie?

来自分类Dev

使用工厂功能提交?

来自分类Dev

Angular JS正确的工厂结构

来自分类Dev

angular.js工厂变量

来自分类Dev

Angular,未引用工厂中的对象

来自分类Dev

使用angular.js激活链接Web API

来自分类Dev

如何使用Angular.js消费Rails RABL API?

来自分类Dev

使用Angular JS,Cors调用symfony 2 rest api

来自分类Dev

使用猫鼬从angular js api更新集合

来自分类Dev

如何使用Angular.js消费Rails RABL API?

来自分类Dev

如何使用Angular JS在API URL中存储添加参数

来自分类Dev

使用angular.js激活链接Web API

来自分类Dev

如何在Angular JS中使用基于令牌的节点API

来自分类Dev

如何使用Angular app.js文件运行NodeJS API?

来自分类Dev

Angular在同一工厂内调用工厂函数

来自分类Dev

使用工厂女孩创建HABTM关联

来自分类Dev

使用工厂类时的代码完成

来自分类Dev

使用工厂返回多个JButton数组...?

来自分类Dev

使用工厂来解决依赖关系

来自分类Dev

使用工厂方法实施Singleton

来自分类Dev

如何使用工厂实例化接口

Related 相关文章

热门标签

归档