2016-10-08 56 views
1

我是AngularJS 2的新手,這是我第一次嘗試使用TSlint進行編譯。我做Tour of Heroes教程,並沒有像下面的一個,這TSlint不想要編譯說object access via string literals is disallowed. 通過字符串文字進行角度2訪問是不允許的

ngOnInit(): void { 
    this.route.params.forEach((params: Params) => { 
     let id = +params['id']; 
     this.projectService.getProject(id) 
     .then(project => this.project = project); 
    }); 
    } 

我不知道如果我理解這個問題的一部分,如果涉及到解決我迷路了它。請問你能幫幫我嗎?

我的其他碼

getProjects(): Promise<Project[]> { 
     return this.http.get(`${this.configuration.Server}projects${this.configuration.ApiUrl}`) 
        .toPromise() 
        .then(response => response.json()) 
        .catch(this.handleError); 
    } 

    getProject(ident: number): Promise<Project> { 
     return this.getProjects() 
      .then(projects => projects.find(project => project.id === id)); 
    } 
+0

問題不在這裏。顯示你的getProject方法。 – micronyks

+0

嘗試將'params ['id']'改爲'params.id'?或者,您可以重新配置您的TSLint設置。 – qqilihq

+0

是的,它不存在 – Leukonoe

回答

0

它可以通過分配字符串文本到一個變量是固定的。並在[]內部使用它。這個link,它有多個選項來解決這個問題。

+0

根本沒有幫助 – Leukonoe

1

我只是擺脫這個規則。通過字符串訪問屬性有時是必要的。如果你看看你的tslint.json文件,你應該看到屬性"no-string-literal"。只要將其改爲假。

如果你想保留規則,那麼對於這種特殊情況,你只需鍵入params即可得到id。您可以這樣做,因爲Params type只不過是{[key: string]: any}

route.params.subscribe((params: {id: string}) =>{ 
    let id = +params.id; 
})