我创建了一个带有单选按钮的AngularJS指令来控制我的页面将查询的环境并将其添加到我的页面.我正在使用双向绑定将名为变量的局部范围变量映射environment到具有相同名称的app变量.当我在模板中明确地创建单选按钮时,它似乎运行良好(在我实际使用的代码中,我templateUrl仍然使用相同的问题).
<div>
<label><input type="radio" name="env" ng-model="environment" ng-change="changeEnvironment(1)" value="1" />Testing</label>
<label><input type="radio" name="env" ng-model="environment" ng-change="changeEnvironment(2)" value="2" />Production</label>
</div>
Run Code Online (Sandbox Code Playgroud)
我可以根据需要多次选择每个选项,并且值一直到应用程序的范围变量.
我想改变单选按钮的创建,以便ng-repeat在选择对象数组上使用.它创建选项,并捕获ngChange事件,但每次选择只能捕获一次.
<label ng-repeat="choice in choices">
<input type="radio" name="env" ng-model="environment" ng-change="changeEnvironment(choice)" value="{{ choice.id }}" />{{ choice.name }}
</label>
Run Code Online (Sandbox Code Playgroud)
这是工作版小提琴和我的指令代码的相关部分:
template: '<div>'
+ '<label><input type="radio" name="env" ng-model="environment" ng-change="changeEnvironment(1)" value="1" />Testing</label>'
+ '<label><input type="radio" name="env" ng-model="environment" ng-change="changeEnvironment(2)" value="2" />Production</label>'
+ '<div>Directive environment: {{ environment }}</div>'
+ '</div>',
link: function(scope, element, attributes) {
scope.changeEnvironment = function(choiceID) { …Run Code Online (Sandbox Code Playgroud) 我注意到当一些新的异步代码抛出错误时,我没有在我的应用程序中收到日志消息。我有一个应用程序可以启动少量无限期运行的异步任务。他们每个人都运行自己的while(true)循环。
while我在几个地方记录了一些错误,但我注意到异常传播在到达任务内无限循环的边界时停止。最初,我的日志记录仅在该循环之外,并且当该特定任务停止运行时,错误没有被记录。
这是一个显示相同行为的示例程序 - 如果我删除while(true)以便该Track()方法仅运行一次,则异常会冒泡到该RunAsync()方法,并且应用程序崩溃(这就是我想要的)。但是有了 while 循环,它会继续运行数字 2 的循环,而数字 1 就悄无声息地死去了。
我知道未等待的任务可能会吞掉它们的异常,但我相信我正在等待所有需要等待的事情 - 如果我错了,请纠正我。
static void Main(string[] args)
{
Console.WriteLine("Starting up");
RunAsync().GetAwaiter().GetResult();
Console.WriteLine("Shutting down");
}
private static async Task RunAsync()
{
try
{
Console.WriteLine("In RunAsync");
List<int> trackers = new List<int> { 1, 2 };
await Task.WhenAll(trackers.Select(tracker => Track(tracker)));
}
catch (Exception e)
{
Console.WriteLine($"{DateTime.Now:HH:mm:ss.fff} => Error in RunAsync\n{e.StackTrace}");
throw;
}
}
private static async Task Track(int number)
{
Console.WriteLine($"Starting …Run Code Online (Sandbox Code Playgroud)