2016-12-15 107 views
1

我的項目結構:角2服務注入問題

enter image description here

app.component.ts:

import { Component } from "@angular/core" 
import { Todo } from './components/shared/todo.model' 
import { todos } from "./components/shared/todo.data" 
import {TodoService} from "./components/shared/todoService" 
import {TodoService} from "./components/shared/todoService"; 

@Component({ 
    moduleId: module.id, 
    selector: "app", 
    templateUrl: "app.component.html", 
    styleUrls: ['app.component.css'], 
    providers: [TodoService] 
}) 
export class AppComponent { 
    title:string = "Angular 2Do"; 
} 

待辦事項,form.component.ts:

import {Component, Output, EventEmitter} from "@angular/core"; 
import {Todo} from "../shared/todo.model"; 
import {TodoService} from "../shared/todoService" 

@Component({ 
    moduleId: module.id, 
    selector: "todo-form", 
    templateUrl: "todo-form.component.html", 
    styleUrls: ["todo-form.component.css"], 
}) 
export class TodoForm { 
    ... 
    constructor(private todoService:TodoService) { 
     console.log(this.todoService); 
     this.todoService.order = 2; 
     console.log(this.todoService); 
    } 

} 

待辦事項,list.component.ts:

import {Component, Input, OnInit} from "@angular/core" 

import { ITodo } from "../shared/todo.model" 
import { TodoService } from "../shared/todoService" 

@Component({ 
    moduleId: module.id, 
    selector: "todo-list", 
    templateUrl: "todo-list.component.html", 
    styleUrls: ["todo-list.component.css"], 
}) 
export class TodoListComponent implements OnInit { 
    todos:ITodo[]; 

    ... 

    constructor(private todoService:TodoService) { 
     ... 
     console.log(this.todoService); 
     this.todoService.order=1; 
     console.log(this.todoService); 

    } 
    ... 

} 

applistform組件的父

Whaen我開始申請我看到控制檯:

enter image description here

但如果展開全部我看到:

enter image description here

這導致實際的和爲什麼在第二視圖我看到1而在另一個2

+0

看看這個https://jsfiddle.net/w4wz302s/。你改變屬性並且console.log()打印一個對象的引用,並且在你打開它的時候,它被改變了。另見http://stackoverflow.com/questions/7389069/console-log-object-at-current-state – yurzui

回答

2

console.log「+」按鈕只能向您顯示對象的當前狀態,而不是調用時的快照對象。

請參閱console.log() async or sync?以獲得更深入的解釋。

所以order:1,是對象的最終狀態。

1

從未使用組件 提供商(providers: [TodoService])作爲

import { Component } from "@angular/core" 
import { Todo } from './components/shared/todo.model' 
import { todos } from "./components/shared/todo.data" 
import {TodoService} from "./components/shared/todoService" 
import {TodoService} from "./components/shared/todoService"; 

@Component({ 
    moduleId: module.id, 
    selector: "app", 
    templateUrl: "app.component.html", 
    styleUrls: ['app.component.css'] 

}) 
export class AppComponent { 
    title:string = "Angular 2Do"; 
} 

這使得當組件初始化這樣就把providers模塊只即新實例。 NgModule