加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 私人角度服务或控制器

发布时间:2020-12-17 06:58:24 所属栏目:安全 来源:网络整理
导读:我有一个包含一些“私人”服务的角度模块.这些私有服务仅在同一模块中的其他服务中需要,并且将它们公开以进行测试是有意义的.但我不希望其他模块使用此服务. 是否有可能将此类服务标记为“私人”?是否至少有一个约定来命名这些服务,以便其他人将它们识别为
我有一个包含一些“私人”服务的角度模块.这些私有服务仅在同一模块中的其他服务中需要,并且将它们公开以进行测试是有意义的.但我不希望其他模块使用此服务.

是否有可能将此类服务标记为“私人”?是否至少有一个约定来命名这些服务,以便其他人将它们识别为私有?

解决方法

如果您需要这些“类”作为angular Services的唯一原因是无痛地注入它们的依赖项,您可以使用$injector.instantiate来实例化它们而不将它们注册为服务.

示例代码:

var PrivateClass = (function () {
    function PrivateClass($log) {
        this.hello = function () { $log.debug("Hello World!");}
    }
    PrivateClass.$inject = ["$log"];
    return PrivateClass;
})();

angular.module('TestApp',[]).run(['$injector',function ($injector) {
    var p = $injector.instantiate(PrivateClass);
    p.hello();
}]);

您可以在需要它的服务中的构造函数(或任何位置)中使用$injector.instantiate(PrivateClass)来创建PrivateClass的实例.如果你需要PrivateClass表现得像一个单例(就像一个真正的角度服务),你可以使用一个实例化它的访问器类,并返回它对调用者的引用.

这样做的好处是你不需要污染实例化服务(在这种情况下是传递给angular.run的函数),只需要依赖项的依赖数组,这样就可以将它们传递给PrivateClass(在这种情况下为$log) .

我注意到这是一个为期一年的问题但是,我发现这一点,同时寻找一种方法来实现上述目标并最终使用这种方法解决它.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读