2013-10-07 59 views
0

我發現了一個SO問題,向我展示瞭如何使用Angular UI - 帶有$ http對象的Bootstrap typeahead。它工作正常(見第一次plunk),直到我將Angular版本更改爲1.2RC2,現在它失敗了。我不太瞭解Angular代碼以找出原因。 1.05到1.2之間發生了什麼變化打破了這種代碼1.0和1.2之間的角度UI類型前額差異

這普拉克工作:http://plnkr.co/edit/eGG9Kj?p=preview

這普拉克不工作:http://plnkr.co/edit/HdVBpp?p=preview

相關的代碼

HTML

<html ng-app="plunker"> 
    <head> 
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.0-rc.2/angular.js"></script> 
    <script src="http://angular-ui.github.com/bootstrap/ui-bootstrap-tpls-0.2.0.js"></script> 
    <script src="example.js"></script> 
    <link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.1/css/bootstrap-combined.min.css" rel="stylesheet"> 
    </head> 
    <body> 

    <alert type="'info'" >Typeahead from <a href="http://angular-ui.github.com/bootstrap/">http://angular-ui.github.com/bootstrap/</a>"</alert> 
    <div class='container-fluid' ng-controller="TypeaheadCtrl"> 
     <pre>Model: {{result | json}}</pre> 
     <input type="text" ng-model="result" typeahead="suggestion for suggestion in cities($viewValue)"> 
    </div> 
    </body> 
</html> 

Javascript

angular.module('plunker', ['ui.bootstrap']); 
function TypeaheadCtrl($scope, $http, limitToFilter) { 

    //http://www.geobytes.com/free-ajax-cities-jsonp-api.htm 

    $scope.cities = function(cityName) { 
    return $http.jsonp("http://gd.geobytes.com/AutoCompleteCity?callback=JSON_CALLBACK &filter=US&q="+cityName).then(function(response){ 
     return limitToFilter(response.data, 15); 
    }); 
    }; 

} 

它在第1564行的Angular UI代碼內部失敗,因爲匹配未定義,因此無法找到matches.length

回答

4

https://github.com/angular/angular.js/issues/4158

https://github.com/angular-ui/bootstrap/issues/949

它直接關係到1.2.0-RC2這種變化。以前,當使用作用域$ eval評估函數調用並返回一個承諾時,它將返回原始承諾對象。實現的更改使得它的promise值被自動解析,導致該值未定義。由於typeahead指令不期望這種行爲,它崩潰。

,可以暫時讓你的函數破解的承諾一點解決這個問題:

promise.$$v = promise; 

$$ v是值時自動解決的承諾角將在內部返回,這將分配的結果對這個價值的承諾也是如此。

我會推薦堅持rc1或等待rc3,因爲這個問題和功能可能會改變。

只是一些額外的信息 - 我相信在RC2之前,承諾在範圍上評估的對象將自動解析,但返回promise的函數調用不是。做出了改變,以在處理承諾時保持一致的功能。

+0

果然,更新plunk來拉RC 1,它工作 –

+0

你提到的黑客並沒有解決這個問題,但回到RC1做,我猜測RC3將強制在Angular UI的決議。我相信我沒有留下1.05的錯誤。角色團隊不應將這些標記爲RC,同時更改功能。 RC應該發佈測試版。 –