我的服务类上有一个属性,如下所示:
articles: Observable<Article[]>;
Run Code Online (Sandbox Code Playgroud)
它由使用标准http.get().map()解决方案的getArticles()函数填充.
如何手动将新文章推送到此数组中; 一个还没有坚持,所以不是http的一部分?
我的方案是,你创建一个新文章,在保存之前我希望Article []数组将这个新文章推送到它,以便它显示在我的文章列表中.
此外,此服务在两个组件之间共享,如果组件A使用ng消耗服务OnInit()并将结果绑定到重复节*ngFor,则将从组件B更新服务数组同时更新组件A的ngFor节中的结果?或者我必须手动更新视图吗?
非常感谢,西蒙
我已经看到多个线程,关于自动检测传入CSV的分隔符的最佳解决方案.其中大多数是长度在20-30行之间的函数,多个循环预定的分隔符列表,读取前5行和匹配计数等等
我刚刚实施了这个程序,只做了一些修改.工作出色.
然后我找到了以下代码:
private function DetectDelimiter($fh)
{
$data_1 = null;
$data_2 = null;
$delimiter = self::$delim_list['comma'];
foreach(self::$delim_list as $key=>$value)
{
$data_1 = fgetcsv($fh, 4096, $value);
$delimiter = sizeof($data_1) > sizeof($data_2) ? $key : $delimiter;
$data_2 = $data_1;
}
$this->SetDelimiter($delimiter);
return $delimiter;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说看起来像是在实现SAME结果,其中$ delim_list是一个分隔符数组,如下所示:
static protected $delim_list = array('tab'=>"\t",
'semicolon'=>";",
'pipe'=>"|",
'comma'=>",");
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么我不应该这么简单地做到这一点,为什么到处都是我看起来更复杂的解决方案似乎是公认的答案?
谢谢!
所以最近我了解了 Subjects,并且我正在尝试在个人项目中使用它们。我有一个从 json 文件中获取数据并将其转换为“文章”类型的服务。Article 是一个自定义类,用于保存有关博客文章的信息。
我的最终目标是获取这个文章数组,然后当我按下 + 按钮时,它会向当前列表添加一个新的空白文章,并且视图应该通过显示具有一些默认值的空白文章来表示它。这不会保留(保存到 json)新的空白文章,而只是将其添加到当前列表中,以便视图更新并显示它。储蓄将在稍后到来。
我这辈子都不能让它发挥作用。所有文章都正确显示在我的“文章列表”页面上,但手动向其推送空白文章似乎根本没有任何作用。
这是我的服务文件
@Injectable()
export class ArticleService {
headers: Headers;
options: RequestOptions;
articles: ReplaySubject<Article[]>;
private url = 'data/articles.json';
constructor(private http: Http) {
this.headers = new Headers({ 'Content-Type': 'application/json' });
this.options = new RequestOptions({ headers: this.headers });
this.articles = new ReplaySubject<Article[]>();
}
/**
* fetch a list of articles
*/
getArticles(): Observable<Article[]> {
// no articles fetched yet, go get!
return this.http.get(this.url, this.options)
.map(response => <Article[]>response.json())
.do(data => this.articles.next(data))
.catch(this.handleError);
}
/**
* …Run Code Online (Sandbox Code Playgroud)