Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.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
Javascript 在Angular中使用rxjs的双向数据绑定_Javascript_Angular_Rxjs_Angular Material - Fatal编程技术网

Javascript 在Angular中使用rxjs的双向数据绑定

Javascript 在Angular中使用rxjs的双向数据绑定,javascript,angular,rxjs,angular-material,Javascript,Angular,Rxjs,Angular Material,我有一个角度模板和组件,我已经从角度材料的调整 我想使用事件和双向数据绑定操作卡上的一些属性。乍一看,双向数据绑定似乎很有效,因为我可以使用指令操作卡中给定索引的editorContent属性,这些更改反映在我添加到视图中进行调试的一个简单的标记中。但是,这似乎并没有实际更新组件中的cards对象 我已经读过,要操纵可观测数据,你必须先订阅它们。clearEditor方法成功地从卡片中获取了数据,但是contentEditor没有从视图中更新,如果我在构造函数中将其设置为非空或非空的字符串,那么

我有一个角度模板和组件,我已经从角度材料的调整

我想使用事件和双向数据绑定操作卡上的一些属性。乍一看,双向数据绑定似乎很有效,因为我可以使用指令操作卡中给定索引的editorContent属性,这些更改反映在我添加到视图中进行调试的一个简单的标记中。但是,这似乎并没有实际更新组件中的cards对象

我已经读过,要操纵可观测数据,你必须先订阅它们。clearEditor方法成功地从卡片中获取了数据,但是contentEditor没有从视图中更新,如果我在构造函数中将其设置为非空或非空的字符串,那么在方法中将其设置为null似乎也不会改变卡片的值

进口{ 组成部分 }从@angular/core开始; 进口{ 地图 }来自rxjs/运营商; 进口{ 断点, 断点观察者 }从@angular/cdk/布局开始; 进口{ 可观察 }来自‘rxjs’; @组成部分{ 选择器:app repl, templateUrl:./repl.component.html, 样式URL:[./repl.component.scss] } 导出类组件{ 卡片:可见; 构造函数私有断点观察者:断点观察者{ this.cards=this.breakpoints.observeBreakpoints.Handset.pipe 地图{ 比赛 } => { 如果匹配{ 返回[{ 标题:HTML, 内容:代码, 语言:html, 科尔斯:1, 行:1, 编辑内容: }, { 标题:CSS, 内容:代码, 语言:css, 科尔斯:1, 行:1, 编辑内容: }, { 标题:PDF, 内容:pdf, 科尔斯:1, 行数:1 } ]; } 返回[{ 标题:HTML, 内容:代码, 语言:html, 科尔斯:1, 行:1, 编辑内容: }, { 标题:PDF, 内容:pdf, 科尔斯:1, 行数:2 }, { 标题:CSS, 内容:代码, 语言:css, 科尔斯:1, 行:1, 编辑内容: } ]; } ; } clearEditorlanguage:字符串{ this.cards.subscribecards=>{ 卡片。forEachfunctioncard{ if card.language==语言{ card.editorContent=null; } }; }; } } 答复 {{card.title} 更多 清楚的 下载 {{card.editorContent}

云端上传 生成PDF 保存备忘 下载PDF
订阅Observable不允许您操作Observable中的数据。将可观测视为一个事件流。通过订阅它们,您只能阅读该流中的内容。根据场景的不同,有不同的方法来处理将数据放入流中的问题。下面是一个片段,希望能帮助您处理您的场景:

import { Subject } from 'rxjs';
import { map, switchMap, startWith } from 'rxjs/operators'

private language = new Subject<string>();

cards = this.breakpointObserver.observe(Breakpoints.Handset).pipe(
  map(breakpoint => {
    /* content of the map operator that you showed in your question */
    return cards;
  }),
  switchMap(cards => {
    return this.language.pipe(
      map(language => {
        const card = cards.find(c => c.language === language);
        card.editorContent = null;
        return cards;
      }),
      // when the outter breakpoint Observable emits, we just 
      // want to emit the cards as is.
      startWith(cards)
    })
  )
);

clearEditor(language: string) {
  this.language.next(language);
}
在这种情况下,使用允许在调用clearEditor方法时调用其下一个方法。对主题调用next就是将数据放入事件流中。请注意,主体扩展了可观察对象,因此主体是可观察对象


是一个运算符,用于将语言主题和可观察断点转换为单个可观察卡片。现在,每当在语言主题上调用next时,可观察的卡片将发出更新的卡片。

下面的代码就是我们最终采用的方法:

导出类REPLComponent实现OnInit{ 列:编号=2; 卡片:阵列=[{ 标题:HTML, 内容:代码, 语言:html, 科尔斯:1, 行:1, 编辑内容:“我的第一份时事通讯” }, { 标题:PDF, 内容:pdf, 语言:空, 科尔斯:1, 行:2, editorContent:null }, { 标题:CSS, 内容:代码, 语言:css, 科尔斯:1, 行:1, 编辑器内容:正文{} } ]; 布局更改:可观察<断点状态>; 建造师 私有断点观察者:断点观察者, 私有http:HttpClient {} 恩戈尼特{ this.layoutChange=this.breakpoints.observeBreakpoints.Handset; this.layoutChange.SubscriberResult:BreakpointState=>{ this.columns=result.matches?1:2; this.cards.forEachcard:Card=>{ card.cols=1; 卡德罗 s=!result.matches&&card.content==pdf?这两列:1; }; }; } clearEditorcard:卡片{ card.editorContent=; }
}在AfterContentInitI钩子中调用代码。