使用工厂的 Angular.JS API

2024-02-18

我编写了一个后端服务,供 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 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() ?


您可以创建一个服务作为跨控制器的存储,例如

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}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用工厂的 Angular.JS API 的相关文章

随机推荐

  • 创建零大小结构体的多种方法之间有什么区别?

    我发现了四种不同的方法来创建struct没有数据 struct A empty struct empty braced struct struct B empty tuple struct struct C unit valued tupl
  • 文件监控系统反应式编程

    我正在使用 C 我是反应式编程的新手 使用反应式编程 我想创建一个文件夹监视系统 如果文件夹 A 包含任何文件 它将调用该系统 如果是 那么它将抓取该文件并处理它并将其移动到文件夹 B 中 假设文件夹 A 首先是空的 用户实时向文件夹 A
  • PHP:检查变量是否存在,但也检查其值是否等于某个值

    我有 或没有 变量 GET myvar 来自我的查询字符串 我想检查这个变量是否存在 以及该值是否对应于我的 if 语句中的某些内容 我正在做和认为不是最好的方法 if isset GET myvar GET myvar something
  • cocos2dx 应用程序中出现“在导入路径中找不到带有标签‘CocosDenshion/android’的模块”错误

    我正在尝试编译在cocos2d x上开发的Android本机应用程序 当我尝试调试我的应用程序时 出现以下错误 Android NDK jni Android mk Cannot find module with tag CocosDens
  • 连接迷宫/网格的墙壁,使所有墙壁相互连接

    我有一个二维网格 我试图在所有墙壁之间创建链接 网格的构造如下 grid new State 8 8 for int i 0 i lt 8 i for int j 0 j lt 8 j grid i j State blank 我有一个机器
  • 使用 Gemfile 进入文件夹时如何调用 RVM?

    我很惊讶 RVM 如何通过命令行导航到目录来切换尊重 Gemfile 的 Ruby 版本 RVM 是否通过 shell 收到回调 任何人都可以提供有关此的指示吗 例如这样的消息 RVM used your Gemfile for selec
  • PHP 中的数组引用混淆

    arr array 1 a arr 0 arr2 arr arr2 0 echo arr 0 arr2 0 Output 2 2 你能帮我看看这怎么可能吗 Note however that references inside arrays
  • WordPress 媒体作为自定义帖子类型

    我正在建立一个 WordPress 网站 允许会员上传视频 图像等媒体 他们将在公共表单上执行此操作 例如 domain com upload 该表单将要求提供标题 简短摘要 显示一些可供选择的类别 最后是文件上传器 然后 用户将能够提交表
  • Nginx 对 CodeIgniter 的重写规则

    这是英语规则 除index php assets 文件夹 files 文件夹和robots txt 之外的任何HTTP 请求都将被视为对index php 文件的请求 我有一个 htaccess在 Apache 服务器上正常工作的文件 Re
  • 使用 Cypress 移动滑块

    我有一个来自 rc slider 的 Slider 组件 我需要 Cypress 来设置它的值
  • 如何将 onClick 侦听器添加到 CKEditor 中的 fileButton?

    我正在使用图像上传器插件 并且有一个如下所示的按钮定义 type fileButton id uploadButton filebrowser info txtUrl label editor lang image btnUpload fo
  • 显示张量流数据集中的示例不起作用

    我想加载张量流flowers https www tensorflow org datasets catalog tf flowers数据集并使用可视化tfds show examples https www tensorflow org
  • 如何让 NUnit Console Runner 打印测试名称

    NUnit 控制台运行程序仅在测试导致打印某些内容时才打印到控制台 有没有办法让它打印每个测试名称 类似于摩卡的东西 如下所示 您正在寻找 labels option 输出级别有多种选择 on off or all 并且随着 v3 6 即将
  • Zend框架1.12的简单路线

    我正在寻找一些简单的东西 但经过多次搜索后我不知道该怎么做 我查看了 Zend 1 12 Route 的文档 但我不太明白 我在 Zend Framework 中有这些页面 application views scripts index 索
  • cdnjs 和 npm 有什么区别?

    cdnjs 和 npm 有什么区别 npm 是一种 CDN 内容分发网络 吗 npm Node Package Manager 是一个由 Node js 模块 包 组成的存储库 您可以从中搜索并下载模块 cdnjs 是 JavaScript
  • ER模型对函数依赖解决方案的解释

    我正在尝试理解一项将 ER 模型转换为函数依赖关系的练习的解决方案 正如您在上面所看到的 我们只有关系名称 除此之外没有其他任何东西 通过解决方案 他们以某种方式得出结论 母亲 女儿 父亲 父亲 女儿 母亲 母亲 儿子 父亲 父亲 儿子 母
  • 为什么我不能使用 php 将数据插入 mysql 数据库

    这相当令人沮丧 我确信这是一个简单的解决方法 据我所知 我的代码是正确的 这让我相信存在服务器问题 我已经创建了数据库 我可以从命令行将数据插入表中 如果有帮助的话我正在使用WAMP
  • 对前十个结果进行排序

    我得到一个列表 其中我通过以下方式保存结果 City Percentage Mumbai 98 30 London 23 23 Agra 12 22 列表结构为 Mumbai 98 30 London 23 23 我以列表的形式保存这些记录
  • 如何在 Windows 上向 Perl 发送信号?

    我有一些建立信号处理程序的 Perl 代码 SIG KILL sub 我的任务是将其移植到 Windows 我想知道如何从 C 类生成此信号 我看到了Process Kill方法中的System Diagnostics Process类似乎
  • 使用工厂的 Angular.JS API

    我编写了一个后端服务 供 Angular JS 前端使用工厂使用 如下所示 angular module app social ngResource factory Social function http return me functi