Angular 的 $q 文档 http://docs.angularjs.org/api/ng.%24q说“$q 承诺被模板引擎以角度方式识别,这意味着在模板中,您可以将附加到范围的承诺视为结果值。”
Angular 的视图模板还允许您计算表达式,这意味着您可以调用从作用域公开的函数。
我发现视图模板能够引用实际值、承诺(最终解析为实际值)或返回实际值的函数,但不能引用返回承诺的函数,这些函数始终呈现{}
进入视图模板。
我创建一个小提琴的例子 http://jsfiddle.net/KnTtv/.
谁能做得更好或引导我朝正确的方向发展?
(也许在视图模板中使用函数是一个坏主意;这种技术还存在其他问题,因为 Angular 监视函数无法在不调用函数的情况下判断它是否已更改,因此监视的函数会在每个摘要循环中进行评估。我见过这些two https://stackoverflow.com/questions/13033118/angular-js-how-to-bind-to-promises 问题 https://stackoverflow.com/questions/14080095/angularjs-promise在这两个例子中,推荐的答案是使用 Promise.then 更改作用域上的普通属性,并让视图模板监视普通属性而不是 Promise。我明白了,但为了我的使用,我想提供一些参数来计算值,并且直接在视图模板中提供这些参数很方便。基本上我想写一些类似 url_for 的东西Flask http://flask.pocoo.org/docs/quickstart/#url-building or Rails http://api.rubyonrails.org/classes/ActionDispatch/Routing/UrlFor.html.)
我不太确定,但如果你返回一个带有 Promise 作为属性的对象,它就会起作用。(fiddle) http://jsfiddle.net/jgoemat/u8K9X/2/
var deferred2 = $q.defer();
$scope.po = { promise: deferred2.promise };
$scope.getPo = function() {
return $scope.po;
};
$timeout(function() {
deferred2.resolve('some lazy text');
}, 2000);
HTML:
<p>Function returning promise (object): {{ getPo().promise }}</p>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)