我在打字稿中读到了这个:
constructor(private <variableName> : Type){}
与
相同constructor(<variableName> : Type){
<variableName> = <variableName>;
}
然后,为什么在下面的代码中我收到错误
import { Component, OnInit } from '@angular/core';
import { WeatherItem } from '../weather-item';
import { WEATHER_ITEMS } from '../weather.data';
import { WeatherService } from '../weather.service';
@Component({
selector: 'app-weather-list',
templateUrl: './weather-list.component.html',
styleUrls: ['./weather-list.component.css']
})
export class WeatherListComponent implements OnInit {
weatherItems : WeatherItem[];
constructor(_weatherService : WeatherService) {
_weatherService = _weatherService;
}
ngOnInit() {
this.weatherItems = this._weatherService.getWeatherItems();
}
}
这里,在ngOnInit方法中,我收到错误'属性_weatherService在类型WeatherListComponent'上不存在。 Code shows error
同时,以下代码可以成功运行。
import { Component, OnInit } from '@angular/core';
import { WeatherItem } from '../weather-item';
import { WEATHER_ITEMS } from '../weather.data';
import { WeatherService } from '../weather.service';
@Component({
selector: 'app-weather-list',
templateUrl: './weather-list.component.html',
styleUrls: ['./weather-list.component.css']
})
export class WeatherListComponent implements OnInit {
weatherItems : WeatherItem[];
constructor(private _weatherService : WeatherService) {}
ngOnInit() {
this.weatherItems = this._weatherService.getWeatherItems();
}
}
**我尝试在构造函数中使用'this'关键字:
constructor( _weatherService : WeatherService) {
this._weatherService = _weatherService;
}
但是现在我在构造函数本身中遇到错误:'属性_weatherService在类型WeatherListComponent'Please check the error screenshot 上不存在
答案 0 :(得分:3)
在这种情况下:
constructor(_weatherService : WeatherService) {
_weatherService = _weatherService;
}
在构造函数范围内,_weatherService
引用传递给它的参数,不引用类成员 。因此,您基本上将_weatherService
的值设置为自身。
现在,如果您执行以下操作:
constructor(_weatherService : WeatherService) {
this._weatherService = _weatherService;
}
编译器正确地抱怨,因为你还没有定义一个名为_weatherService
的类成员
您可以通过执行以下操作来解决此问题:
_weatherService: WeatherService; // defaults to public visibility
constructor(_weatherService : WeatherService) {
this._weatherService = _weatherService;
}
正如你所说的那样,typescript提供parameter properties,这只是一些语法糖,以避免繁琐的值初始化。
考虑到这一点,我们可以检查一些其他有趣的案例:
constructor(private _weatherService : WeatherService) {
this._weatherService = _weatherService;
}
这将设置类成员_weatherService
的值两次:一次通过ts功能,一次由于手动初始化。
weatherItems : WeatherItem[];
constructor(_weatherService : WeatherService) {
this.weatherItems = _weatherService;
}
这将设置类成员weatherItems
,但不会定义名为_weatherService
的类成员。基本上,您可以注入一个参数,从中提取一个值并将其存储在类成员中,而不必在该类中存储对该参数的引用。
答案 1 :(得分:2)
在构造函数中,您需要将它添加到构造函数中引用的WeatherListComponent this
:
constructor(_weatherService : WeatherService) {
this._weatherService = _weatherService;
}
答案 2 :(得分:1)
在构造函数中,当您尝试分配注入的服务时,_weatherService尚未实例化或声明)您尚未创建变量_weatherService。
public _weatherService: WeatherService = new WeatherService();
constructor(_weatherService : WeatherService) {
this._weatherService = _weatherService;
}
答案 3 :(得分:1)
constructor(private <variableName> : Type){}
相当于
private <variableName>: Type;
constructor(<variableName> : Type){
this.<variableName> = <variableName>;
}
您可以在游乐场here中看到一个有效的例子。