ember.js – EmberJS 2中路由变更通知的组件

前端之家收集整理的这篇文章主要介绍了ember.js – EmberJS 2中路由变更通知的组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的任务是为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文档中我假设但是在它的源代码中检查出来了吗?一般来说,如果名称稳定,它会成为*路由或最终版本中的某些东西吗?

解决方法

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

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

猜你在找的JavaScript相关文章