Angular 模板调用函数可以返回承诺吗

met*_*att 5 javascript promise angularjs

Angular 的 $q 文档说“$q 承诺被 angular 中的模板引擎识别,这意味着在模板中,您可以将附加到范围的承诺视为结果值。”

Angular 的视图模板还允许您评估表达式,这意味着您可以调用从作用域公开的函数。

我发现视图模板能够引用真实值、承诺(最终解析为真实值)或返回真实值的函数,但不能引用返回承诺的函数,它们总是呈现{}到视图模板中。

用这个例子创建了一个小提琴

谁能做得更好或引导我朝着正确的方向前进?

(也许在视图模板中使用函数是个坏主意;这种技术还有其他问题,因为 Angular 观察函数无法在不调用函数的情况下判断它是否发生了变化,所以被观察的函数在每个摘要周期都会被评估。我已经看到这两个 问题,并且在这两个问题中,推荐的答案是使用 promise.then 来更改作用域上的正常属性,并让视图模板监视正常属性而不是 promise。我明白了,但是对于我的使用,我想提供一些参数来计算一个值,并且直接在视图模板中提供这些参数很方便。基本上我试图在FlaskRails 中编写类似 url_for 的东西。)

Jas*_*aat 2

我不太确定,但如果你返回一个带有 Promise 作为属性的对象,它就会起作用。 (小提琴)

var deferred2 = $q.defer();
$scope.po = { promise: deferred2.promise };
$scope.getPo = function() {
    return $scope.po;
};

$timeout(function() {
    deferred2.resolve('some lazy text');
}, 2000);
Run Code Online (Sandbox Code Playgroud)

HTML:

<p>Function returning promise (object): {{ getPo().promise }}</p>
Run Code Online (Sandbox Code Playgroud)