2014-11-24 51 views
0

我正在寫一個指令包裝器圍繞一個typeahead輸入。該指令用於監聽鏈接上的更改並獲取預先輸入的新數據+選項。AngularJS typeahead情緒不是最新的

我可以簡單地用$超時模擬這種行爲,並在this plnkr.co中演示它。

JS

app.controller('sample', function($scope, $timeout) { 

    $scope.options = ['1800', '1900', '2100']; 

    // Simulate some latency 
    $timeout(function() { 

    $scope.options.push('1850'); 

    }, 4000); 

}); 

HTML

<div> 
    <input type="text" ng-model="optionValue" typeahead="opt for opt in options | filter:$viewValue"> 
</div> 

如果你開始鍵入它顯示1800預期的輸入域 '18'。但是,當1850年獲得的時間增加後,typeahead的可選選項不會被更新。

- FYI我活生生的指令看起來像這樣 -

$scope.$watch($interpolate(url), function (newUrl) { 
    $http.get(newUrl).then(function (response) { 
    $scope.options = response; 
    }); 
}); 

我試圖用typeahead="opt for opt in getData()"但這並不工作,因爲插入值還沒有最新的。它總是落後於一個價值。

回答

0

如果有人對解決方案感興趣,下面是我現在解決它的方法。我對最終結果不滿意,請給我一些反饋:-)。

Plunkr

退房更新-bootstrap.js,我不得不添加下面以使其工作:

的自定義屬性爲$ watchCollection

var customOptions = attrs.typeaheadCustomOptions || ''; 
那將是使用

在那裏得到我添加了一個觀看比賽的功能,如果customOptions提供:

if (customOptions) { 
    originalScope.$watchCollection(customOptions, function (matches) { 
      resetMatches(); 
      updateMatches(matches); 
    }); 
} 

而這基本上是:-),updateMatches只是現有代碼的抽象。它沒有被我和手動更新使用。

var updateMatches = function(matches) { 
     for (var i = 0; i < matches.length; i++) { 
      locals[parserResult.itemName] = matches[i]; 
      scope.matches.push({ 
         id: getMatchId(i), 
         label: parserResult.viewMapper(scope, locals), 
         model: matches[i] 
      }); 
     } 

     scope.query = modelCtrl.$viewValue; 
}; 

開業問題上github

0

似乎是一個問題發佈在AngularUI Bootstrap website。每次按鍵都會選中匹配項,但如果在擊鍵間更改基礎數據,則不會更新。我沒有看到任何解決方法,除了可能手動觸發相應的鍵輸入事件處理程序(當您更改集合時)。

+0

謝謝您的回答,我設法在角ui.js添加一個醜陋的修復來解決該問題。在我發佈之前,我會等待更好的答案。我的解決方案只是增加了一個手錶,如果它發生變化 - >更新popup – Dieterg 2014-11-24 14:45:15

+0

@DieterGoetelen認爲將問題發佈到圖書館的GitHub網站(甚至創建拉請求)會更有幫助,並討論你的解決方案。 – hon2a 2014-11-24 15:30:42

+0

它被張貼爲gihub頁面上的錯誤。 – Dieterg 2014-11-24 16:07:08