代码1:
foreach( $site_array as $site ){
// Visit "$site.'/my_script.php'"
// when "$site"'s ForEach loop is done, move to the next $site after a break
}
file_get_contents("file.php"); //example
代码2:
import { Component,OnInit } from '@angular/core';
import {exampleClass} from './exampleClass'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
list: number[] = [1, 2, 3];
constructor(a:exampleClass) {
a.hello();
}
}
exampleClass.ts Cose:
import { Component,OnInit } from '@angular/core';
import {exampleClass} from './exampleClass'
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
list: number[] = [1, 2, 3];
constructor() {
const a = new exampleClass ;
}
}
为什么代码1给出错误并且代码打印A在控制台中,什么是两种初始化方法之间的区别?
答案 0 :(得分:1)
在您的第一个代码中,
export class AppComponent {
list: number[] = [1, 2, 3];
constructor(a:exampleClass) {
a.hello();
}
}
exampleClass
应该是service
,而services
可以作为constructor
注入parameter
。
因此,您可能会收到错误没有HeroDetailComponent的提供程序
因此,如果exampleClass
是一项服务,它可能会有效。
答案 1 :(得分:1)
您可能希望阅读Angular中的依赖注入:https://angular.io/guide/dependency-injection-pattern(也可能是一般情况下)。
在第一种情况下,AppComponent
无需了解exampleClass
的详细信息。在第二种情况下,您决定使用什么类。
在第一种情况下,当AppComponent
被实例化时,Angular将为您处理参数,实例化所需的类。这种方法的优点是你可能不想总是在那里使用相同的类。也许在你的测试中你想要使用另一个模拟类。在第二种情况下,您无法做到:AppComponent
与exampleClass
紧密结合。
在第一种情况下,您可以决定组件将接收的实例类型,而不会影响组件。在第二种情况下,情况并非如此。如果您不想传递exampleClass
,而是传递派生类,则应该触摸它。实际上,如果这些类的构造函数不是无参数的,那么AppComponent
也必须知道如何实例化它们。
我认为,您收到错误的原因是您没有使用exampleClass
装饰@Injectable()
。这个装饰器告诉Angular这个类可以通过依赖注入实例化。
此外,您应该将exampleClass
添加到providers
AppModule
部分
@Injectable() export class exampleClass { ... }
@NgModule({
providers: [exampleClass],
...
})
export class AppModule { }
答案 2 :(得分:1)
代码1是您希望服务<在组件之间共享。
例如用于存储数据 - &gt;如果你这样做.service.data =&#39; test&#39 ;; 所有其他代码为1的组件都可以
console.log(this.service.data); // print 'test'
您实例化代码2,因此该服务一个范围在您的组件中的新实例。