小编Dan*_*nny的帖子

ng-change事件仅在使用ng-repeat创建时为每个单选按钮触发一次

我创建了一个带有单选按钮的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)

angularjs angularjs-directive

11
推荐指数
2
解决办法
3万
查看次数

while(true) 循环中吞没了异步异常

我注意到当一些新的异步代码抛出错误时,我没有在我的应用程序中收到日志消息。我有一个应用程序可以启动少量无限期运行的异步任务。他们每个人都运行自己的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)

c# exception async-await

2
推荐指数
1
解决办法
562
查看次数