3

我現在用的是Angularjs引導事先鍵入的內容指令,並運行到,上面寫着以下內容的錯誤:Angularjs事先鍵入的內容指令 - 錯誤:「」無法讀取財產「不定長度」」

錯誤

TypeError: Cannot read property 'length' of undefined 
at ui-bootstrap-tpls-0.12.1.min.js:9 
at angular.min.js:112 
at l.$get.l.$eval (angular.min.js:125) 
at l.$get.l.$digest (angular.min.js:122) 
at l.$get.l.$apply (angular.min.js:126) 

下面是我的HTML

<h4>Asynchronous results</h4> 
<pre>Model: {{asyncSelected | json}}</pre> 
<input type="text" ng-model="asyncSelected" placeholder="Patients loaded via $http" typeahead="result as result.patient.drug.drugindication for result in getPatient($viewValue)" typeahead-loading="loadingPatients" class="form-control"> 
<i ng-show="loadingPatients" class="glyphicon glyphicon-refresh"></i> 

的Javascript

$scope.getPatient = function(val) { 
return $http.get('https://api.fda.gov/drug/event.json', { 
    params: { 
    search: 'patient.drug.drugindication:' + val 
    } 
}).then(function(response){ 
    return 
    { 
    search: response.data 
} 
}); 
}; 
getPatient()收到

Codepen http://codepen.io/anon/pen/XJBNEq?editors=101

+1

你有任何plnkr /小提琴嗎? – 2015-03-03 13:55:15

+0

請看我更新的文章 – user1142130 2015-03-03 16:39:57

回答

0

你VAL和你的函數可以返回空值。所以當typeahead在空對象上調用length屬性時。我認爲你可以通過在調用webservice之前添加一個檢查來解決它,並在輸入爲空時返回一個空數組。

$scope.getPatient = function(val) { 
if(!val) { //directly return an empty array if val is null, or empty string 
    return []; 
} 

return $http.get('https://api.fda.gov/drug/event.json', { 
    params: { 
    search: 'patient.drug.drugindication:' + val 
    } 
}).then(function(response){ 
    return 
    { 
    search: response.data 
} 
}); 
}; 
+0

Mathieu,我試過你的解決方案,但是它沒有工作。同樣的錯誤 – user1142130 2015-03-03 14:10:19

+0

你可以做一個plunkr或類似的東西嗎? – 2015-03-03 14:30:13

+0

請看我更新的帖子 – user1142130 2015-03-03 17:11:18

0

我寫的代碼對我很有用。 $ http重新承諾應該將哪個結果寫入您的控制器範圍。

$scope.getPatient = function(val) { 
var data = $http.get('https://api.fda.gov/drug/event.json', { 
    params: { 
    search: 'patient.drug.drugindication:' + val 
    } 
}); 
data.then(function(response){ 
    if (response.data != null) 
     $scope.asyncSelected = response.data; 
    else 
     $scope.asyncSelected = []; 
}); 
}; 

照顧產生的空結果。 同時在範圍中設置正確的名稱。 如果數據沒有更改,請將$ watch設置爲asyncSelected。 如何搜索參數? 通常你送PARAMS不喜歡:

search: 'patient.drug.drugindication:' + val 

'patient.drug.drugindication': + val 

params { 
key: value, 
key2: value2 
} 
+0

青色感謝您的回覆,但我仍然得到相同的錯誤:(它與角引導有關,因爲錯誤說「在ui-bootstrap-tpls-0.12.1.min.js:9 「 – user1142130 2015-03-03 16:07:35

+0

什麼是錯誤? – cyan 2015-03-03 18:00:37

0

你忘了

return data; 

$scope.getPatient = function(val) { 

    var data = $http.get('https://api.fda.gov/drug/event.json', { 
      params: { 
      search: 'patient.drug.drugindication:' + val 
     } 
    }); 
    data.then(function(response){ 
     $scope.gotresults = response.data.results; 
     console.log($scope.gotresults) 
     if (response.data != null) { 
      $scope.asyncSelected = response.data.results; 
     } 
     else { 
      $scope.asyncSelected = []; 
     } 
    }); 

    return data; 
}; 

`

Updated Demo

2

你只需要返回承諾本身。不要使用.then()

$scope.getPatient = function(val) { 
return $http.get('https://api.fda.gov/drug/event.json', { 
    params: { 
    search: 'patient.drug.drugindication:' + val 
    } 
}) 
}; 
相關問題