AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了
生活随笔
收集整理的這篇文章主要介紹了
AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
昨天剛知道,原來把一個Promise綁定到Scope,View會自動顯示該Promise的值(auto-unwarp),但是晚上回家試的時候發現,無論如何都不行。又浪費了兩個多小時找原因,最后才發現,這個auto-unwrap的功能在AngularJs 1.2.0的某個RC之后就被禁用了。官方用詞Deprecated,沒有替代怎么叫deprecated呢?明明就是removed!
這是StackOverflow的提問:http://stackoverflow.com/questions/21193400/why-promise-in-factory-not-working-since-angularjs-1-2-0
這是Plnkr:?http://plnkr.co/edit/w2O8Ci?p=preview
所以,下面代碼里面的Promise已經不會自動綁定了,要讓他工作正常,需要:
NameFactory.getName().then(function(data){$scope.name = data});代碼: <!DOCTYPE html> <html ng-app="myApp"><head><!--<script src="http://code.angularjs.org/1.1.5/angular.min.js"></script>--><script src="http://code.angularjs.org/1.2.9/angular.min.js"></script><script>var app = angular.module('myApp', []);app.factory('NameFactory', function($http, $q) {return {getName: function() {var deferred = $q.defer();deferred.resolve({name: "World"});return deferred.promise;}}});app.controller("NameCtrl", function($scope, NameFactory) {$scope.name = NameFactory.getName();});</script> </head><body ng-controller="NameCtrl"><h1>Hello, {{name.name}}</h1> </body></html>
所以正確的做法是:
<!DOCTYPE html> <html ng-app="myApp"><head><script src="http://code.angularjs.org/1.2.9/angular.min.js"></script><script>var app = angular.module('myApp', []);app.factory('NameFactory', function($http, $q) {return {getName: function() {var deferred = $q.defer();deferred.resolve({name: "World"});return deferred.promise;}}});app.controller("NameCtrl", function($scope, NameFactory) {NameFactory.getName().then(function(data){$scope.name = data;});});</script> </head><body ng-controller="NameCtrl"><h1>Hello, {{name.name}}</h1> </body></html>轉載于:https://www.cnblogs.com/puncha/p/3876855.html
總結
以上是生活随笔為你收集整理的AngularJs 抓狂之: $q promise 自动unwarp功能被禁用了的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Matlab--sort排序
- 下一篇: POJ 2253 Frogger(最短路