Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 什么';s Emberjs上的mixin和服务之间的区别_Ember.js - Fatal编程技术网

Ember.js 什么';s Emberjs上的mixin和服务之间的区别

Ember.js 什么';s Emberjs上的mixin和服务之间的区别,ember.js,Ember.js,我试图遵循最佳实践Ember及其潜力,我想到了这个问题mixin和Services之间的区别是什么,以及您是如何使用它们的 我有一些服务/混音,工作得很好,但我想确定我做得对 Amixin是指希望不同对象具有相同的行为/数据。假设您希望多个控制器触发相同的操作,但更改一个参数: // app/mixins/change-name.js export default Ember.Mixin.create({ actions: { changeName(item) { ite

我试图遵循最佳实践Ember及其潜力,我想到了这个问题mixin和Services之间的区别是什么,以及您是如何使用它们的


我有一些服务/混音,工作得很好,但我想确定我做得对

Amixin是指希望不同对象具有相同的行为/数据。假设您希望多个控制器触发相同的操作,但更改一个参数:

// app/mixins/change-name.js
export default Ember.Mixin.create({
  actions: {
    changeName(item) {
      item.set('name', this.get('name'));
    }
  }
});

// app/controllers/some-controller
import ChangeName from '<app-name>/mixins/change-name';

export default Ember.Controller.extend(ChangeName, {
  name: 'Some Controller'
});
//app/mixins/change-name.js
导出默认的Ember.Mixin.create({
行动:{
更改名称(项目){
item.set('name',this.get('name');
}
}
});
//应用程序/控制器/某些控制器
从“/mixins/change name”导入ChangeName;
导出默认的Ember.Controller.extend(ChangeName{
名称:“某个控制器”
});

请注意,控制器将具有相同的操作,但它不是共享的,每个控制器都有自己的操作。您还可以从对象本身扩展混合,因为它们被添加到
\u super()
链中

要记住的一个问题是,像数组这样的原始按引用数据类型仍然是按引用传递的。因此,如果您有一个具有array属性的Mixin,请确保在每次使用Mixin时在数组上使用
Ember.computed
,以创建新实例。否则,仅使用泛型
[]
将导致所有Mixin使用指向同一数组。不同的参考值,都指向同一事物

服务可以看作是一种可变的共享数据。如果您有一组数据或行为需要从应用程序的不同部分访问,那么它是一个很好的服务候选者


例如,购物篮就是这样一个例子。无论您在应用程序中的哪个位置,您都需要参考同一个购物篮来处理其数据。

如果您添加您认为它们是什么以及为什么您认为它们是可互换的,这会有所帮助,您是否尝试阅读文档?如果是的话,你能指出文件中令人困惑的地方吗?第一种观点是,它们非常相似,但我想听听每个文件的概念。可能是我正在做的“工作”,但根本不对。主要是,我使用服务/混合来共享
控制器/路由/组件之间的共同行为。这意味着服务在应用程序中是同一实例,而它是活动的?是的!服务是单例对象。“但它不是共享的,每个都有自己的”。。。我知道你现在不是在谈论对象文字,但我认为应该在你的回答中提到。它显示了与mixin共享或不共享数据有关的实现细节。