小编kai*_*air的帖子

我应该在注入的 Angular 服务上使用只读而不是公开它们吗?

今天我进行了一次讨论,我的一些同事说他们像这样注入 Angular 服务:

constructor(readonly language: I18nService)
Run Code Online (Sandbox Code Playgroud)

他们说他们这样做是因为它可以防止我的组件的使用者更改注入的服务,有点像这样:

@Component({ ... })
class ComponentA {
    constructor(public language: I18nService) {}
}

@Component({ ... })
class ComponentB {
    @ViewChild(ComponentA) compA: ComponentA;
    constructor() {
        this.compA.language = new I18nService();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,虽然从技术上讲他们是对的,但我仍然不相信我应该这样做。我问自己以下问题:

  1. DI 是 Angular 的基本组成部分。如果有人真的这么做了,这个人是应该更好地进入这个坑并失败,还是他/她根本做不到?

  2. readonly在这种情况下,对于刚开始学习 Angular 和 TypeScript 的人来说,理解起来可能相当复杂,原因有几个

    • Angular 在其任何官方 DI 文档中均未使用此方法
    • 您需要知道它是如何readonly工作的,并且它只是保护我注入的服务的引用,但没有任何属性
  3. 在我看来,这是一个极端情况问题,尽管有一个简单的解决方案

你怎么认为?有没有我可能没见过的官方参考资料?readonly当我尝试在 Angular 概念中使用 google 时,我没有找到任何内容

最后一句话:虽然它是 100% 真实的 - 可以操纵参考public service: Service- 我仍然不确定这个问题是否应该得到解决,并且纠结是否要这样做。

dependency-injection angular-services angular

11
推荐指数
2
解决办法
8903
查看次数

返回对象为json时访问雄辩的关系

我目前正在使用Laravel/Lumen构建JSON RESTful API,现在尝试访问存储在此模型关系中的模型属性

// I also want to return User->roles
return User::find(1)->first();
Run Code Online (Sandbox Code Playgroud)

返回:

{
  "id": 2,
  "email": '...'
}
Run Code Online (Sandbox Code Playgroud)

我实际上找到了一种方法,但这似乎非常黑客而且不干净

    // Get user
    $user = User::find($id)->first();

    // Make roles public
    $user->roles = $user->roles;

    // Return object
    return $user;
Run Code Online (Sandbox Code Playgroud)

返回:

{
  "id": 2,
  "email": '...',
  "roles": [
  ...
  ]
}
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?或者这是一种安全的东西,你想要保护你的数据?但既然你可以访问php中的关系,为什么不应该将它作为json对象返回?

在laravel文档中找不到任何内容

php json laravel eloquent lumen

1
推荐指数
1
解决办法
1986
查看次数