Angularjs 角度:如何将承诺加载到模板中?

Angularjs 角度:如何将承诺加载到模板中?,angularjs,templates,promise,Angularjs,Templates,Promise,我该如何让这件事起作用?有几件事你做错了: 当您像在vm.promises[src]=$http.get(src)中那样为变量分配承诺时,然后(…),则该变量是一个承诺。它不会填充回调函数返回的内容。在这种情况下,正确的方法如下所示: {} 这本身会给你你想要的结果(),但如果你打开开发工具,你会看到可怕的事情:stuff.txt被多次调用,最终抛出一个无限摘要循环错误。这是因为你从模板调用loadStuff。请看上面@Gustav的评论。这导致我们 您不应该将同步调用与异步调用混合使用。您调

我该如何让这件事起作用?

有几件事你做错了:

  • 当您像在
    vm.promises[src]=$http.get(src)中那样为变量分配承诺时,然后(…
    ),则该变量是一个承诺。它不会填充回调函数返回的内容。在这种情况下,正确的方法如下所示:

    {}
    
    这本身会给你你想要的结果(),但如果你打开开发工具,你会看到可怕的事情:
    stuff.txt
    被多次调用,最终抛出一个无限摘要循环错误。这是因为你从模板调用
    loadStuff
    。请看上面@Gustav的评论。这导致我们

  • 您不应该将同步调用与异步调用混合使用。您调用
    loadStuff
    ,希望它的行为像一个同步函数,并在其实现调用异步函数时立即返回一个值。正确的方法是让控制器调用异步函数一次,将返回的值存储在解析,并在模板中显示存储的值。请参见一个简单示例


  • 你应该检查一下,这听起来像是你想要的。我的问题不是如何获取数据-这是有效的。我的问题是如何在模板中正确绑定它…如果你阅读了$resource,你会看到它解决了显示http请求结果的问题。同样,你不应该从模板调用函数,这样它将是ca每$digest cykel一次调用一次(这是您看到的,它被调用了6次),例如,您应该在控制器中调用它一次,然后将结果绑定到作用域,您可以显示我并没有尝试混合使用同步和异步调用,而是尝试让模板引擎为我解决问题。我认为它在早期的angular版本中工作过……我想他们放弃它是因为对摘要进行了大修引擎。我认为这在任何角度的版本中都不起作用…无论如何,请遵循我的指导原则,一切都应该正常:)再次,请查看$resource。使用$resource,您可以将资源调用的结果直接放在模板中(但在控制器中进行调用)。然后,当请求的承诺得到解决时,资源将用数据填充模板
    {}
    
    $http.get(src).then(function(res) {
      console.log("returning data: " + res.data);
      vm.promises[src] = res.data;
    });