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 
    } 
}) 
}; 
相关问题