在Angular 4中,我在json配置文件中定义了以下配置.
countries: ['USA', 'UK', 'Canada'];
default: 'UK'
Run Code Online (Sandbox Code Playgroud)
我需要使用Reactive模块在下拉列表中显示这些内容.
这是执行此操作的代码(ts)
countries: string[] = [];
default: string;
...
this.countries = config.countries;
this.default = config.default;
Run Code Online (Sandbox Code Playgroud)
HTML
<select id="country" formControlName="country" >
<option *ngFor="let c of countries" [value]="c" >{{ c }}</option>
</select>
Run Code Online (Sandbox Code Playgroud)
这样做可以显示下拉国家/地区.但是,我还需要默认选择一个国家/地区,默认国家/地区来自json中定义的"默认"键.
所以,我尝试过做这样的事情
{{ C }}
但是,这不起作用.默认情况下,如果选择空值.
如何确保默认选择预定义值?
我正在学习递归,下面是我要追踪的一个例子,以便更好地理解它
public static void main(String []args) {
new TestRecursion().strRecur("abc");
}
public void strRecur(String s) {
if(s.length() < 6) {
System.out.println(s);
strRecur(s+"*");
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我到目前为止所理解的内容.- 在第一次调用时strRecur("abc"),该方法被添加到执行堆栈中.由于使用参数"abc*"进行递归调用,它会在暂停之前打印"abc".
第二次使用"abc*"调用,将方法推strRecur(abc*)送到堆栈并将"abc*"打印到控制台.
第三次使用"abc**"调用,将方法推strRecur(abc**)送到堆栈并将"abc**"打印到控制台.
第四次调用"abc***",将方法推strRecur(abc***)送到堆栈.由于满足基本条件,该方法完成(不打印任何内容)并弹出堆栈.
第三次调用"abc**"已完成并弹出.由于没有待执行的代码可以执行任何操作.
第二次调用"abc*"已完成并弹出.由于没有待执行的代码可以执行任何操作.
"abc"的初始调用已完成并弹出.由于没有待执行的代码可以执行任何操作.
打印到控制台后面 -
abc
abc*
abc**
Run Code Online (Sandbox Code Playgroud)
我想我明白这里发生了什么.现在,我想尝试稍微改变一下这段代码.strRecur(s+"*")我想做而不是打电话return strRecur(s+"*")
public class TestRecursion {
public static void main(String []args) {
new TestRecursion().strRecur("abc");
}
public String strRecur(String s) {
if(s.length() < 6) {
System.out.println(s);
return strRecur(s+"*");
}
return "Outside If";
}
} …Run Code Online (Sandbox Code Playgroud) 我试图通过可视化来理解Java中的递归。我浏览了youtube上的一些教程,并使用其中的一个以下示例
public class TestRecursion {
public static void main(String []args) {
new TestRecursion().reduceByOne(10);
}
public void reduceByOne(int n) {
System.out.println("Before "+n);
if(n >= 0) {
reduceByOne(n-1);
System.out.println("Inside "+n);
}
System.out.println("After "+n);
}
}
Run Code Online (Sandbox Code Playgroud)
根据到目前为止的了解,对reduceByOne()的每次调用都将放置在执行堆栈中。就像是
因此,首先main()进入堆栈。由于它调用了reduceByOne(10),因此此方法将进入堆栈,然后将调用reduceByOne(9)并将其压入堆栈,依此类推。在将reduceByOne(-1)推入堆栈后,由于没有其他方法可以执行,reduceByOne(-1)将被弹出并执行。
我无法理解一旦弹出该方法会发生什么?让我们说,reduceByOne(2)从堆栈中弹出。我相信,将要执行的代码看起来像这样
public void reduceByOne(2) {
System.out.println("Before "+2);
if(2 >= 0) {
reduceByOne(2-1);
System.out.println("Inside "+2);
}
System.out.println("After "+2);
}
Run Code Online (Sandbox Code Playgroud)
这不会再将reduceByOne(2-1)放到堆栈上吗?还是会被跳过?如果是这样,运行时如何知道弹出方法后执行什么和跳过什么?
可能是我太复杂了。但是,我无法对递归有一个清晰的了解,因此非常感谢您的帮助。
我正在使用Angular 4反应形式创建一个下拉列表
<select id="city" formControlName="city" (change)="onCitySelect($event)" >
<option *ngFor="let city of cities" [ngValue]="city" >
{{ city }}
</option>
</select>
Run Code Online (Sandbox Code Playgroud)
在下拉列表中选择一个值时,我想调用一个方法并显示所选值。
这是我的代码
onCitySelect(event) {
console.log(event.target.value);
}
Run Code Online (Sandbox Code Playgroud)
我希望它能打印下拉列表中所示的城市名称。但是,它似乎也显示索引号。例如,
2: London
Run Code Online (Sandbox Code Playgroud)
而不是London下拉列表中实际显示的内容。
没有索引如何获取城市名称?