当前位置:  开发笔记 > 运维 > 正文

EmberJS 2中路线变更通知的组件

如何解决《EmberJS2中路线变更通知的组件》经验,为你挑选了1个好方法。

我的任务是为Ember 2应用程序开发一个菜单组件.这将是一个复杂的组件,其视觉表示随着用户经过路线而改变.例如,它应该在"/ index"路由时禁用特定菜单及其所有项目,但在"/ details"等时启用它及其一些项目.

所以,我有一个传递单例模型的组件(当前存储在服务中,顺便说一下,它是在Ember中存储全局可用的单例模型的正确位置吗?).它可以很好地显示内容,但它不会尊重当前路线,也不会在用户浏览应用程序时捕获路径更改.我怎样才能实现它?

总结一下:

    组件需要以某种方式获得当前路由以能够显示其初始状态,例如用户将"/ details"页面加入书签并访问它.

    该组件必须以某种方式处理路由更改.

    服务是保存单例模型(可能从服务器获取)的好地方.

您能否就如何解决上述三项问题提出自己的想法?

解决:好的,这是如何完成的,感谢@ Bek的建议:

import Ember from "ember";

export default Ember.Component.extend({
    router: Ember.inject.service("-routing"),

    didInsertElement: function() {
        let r = this.get("router");
        console.log("Initial route", r.get("currentRouteName"));

        r.addObserver("currentRouteName", this, "currentRouteNameChanged");
    },

    "currentRouteNameChanged": function(router, propertyName) {
          console.log(router.get("currentRouteName"));
    }
});

更多问题:) - 我不得不currentRouteNameChanged用引号括起函数名称(使其成为一个字符串),否则它不会被调用.我想我错过了一些非常基本和明显的东西吗?

还有一个问题是时髦的服务名称-routing- @Bek,我可以自己弄清楚的任何提示,是否有可以注册信息的可注入内容列表?它还没有在Ember文档中我假设但是它的源代码在哪里检查出来?如何稳定的-routing名称,它会成为*routing最终版本的东西吗?



1> Bek..:

回答1和2:在最新版本的ember 2.x(至少2.2中)router可用作服务,因此您可以将其注入组件router: Ember.inject.service('-routing')并观察更改currentRouteName,但它目前是私有服务,因此应谨慎使用,因为它可能会改变(可能会重命名routing),还有rfc https://github.com/emberjs/rfcs/pull/38,它提出了可路由的组件,这些组件将来会成为ember的一部分.

Anser to 3:服务通常是无状态的,但是可以存在共享全局逻辑/对象的异常和服务,所以这不是一个坏主意

推荐阅读
贴进你的心聆听你的世界
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有