2016-03-01 104 views
4

我正在尝试使一个具有拾取/丢弃地址的地址框。 Like this one与AngularJs。未捕获InvalidValueError:initAutocomplete不是一个函数

即时通讯使用Google Autocomplete API所以我可以自动完成,因为有人开始在地址中输入内容。

addressBoxView.html:

<form> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">Pickup Address</label> 
    <input type="input" class="form-control" id="autocomplete" placeholder="Enter Address Here" ng-focus="initAutocomplete()"> 
    </div> 
    <div class="form-group"> 
    <label for="exampleInputEmail1">Dropoff Address</label> 
    <input type="text" class="form-control" id="" placeholder="Enter Address Here"> 
    </div> 
    <button type="submit" class="btn btn-default" id="submit">Submit</button> 
</form> 

addressBoxDirective.js:

angular.module('app.directives.addressBox', []) 
    .directive('addressBox', function(){ 
    return { 
     restrict: 'E', 
     scope: { 
     data: '=' 
     }, 
     templateUrl: 'shared/addressBox/addressboxview.html', 
     controller: function($scope){ 

     $scope.initAutocomplete = function() { 
      // Create the autocomplete object, restricting the search to geographical 
      // location types. 
      autocomplete = new google.maps.places.Autocomplete(
       /** @type {!HTMLInputElement} */(document.getElementById('autocomplete')), 
       {types: ['geocode']}); 

      // When the user selects an address from the dropdown, run the fillinAddress function which will do something 
      autocomplete.addListener('place_changed', fillInAddress); 
     } 

     function fillInAddress(){ 
      console.log(autocomplete); 
     } 
     } 
    }; 
    }); 

首先,我得到这个错误时,马上在页面运行/负载。

Uncaught InvalidValueError: initAutocomplete is not a function 

然后当我专注于皮卡盒我也得到这个错误。

TypeError: Cannot read property 'Autocomplete' of undefined 
    at Scope.$scope.initAutocomplete (http://play.uvgrade.com:9000/shared/addressBox/addressBoxDirective.js:14:48) 
    at fn (eval at <anonymous> (http://play.uvgrade.com:9000/bower_components/angular/angular.js:14086:15), <anonymous>:4:239) 
    at expensiveCheckFn (http://play.uvgrade.com:9000/bower_components/angular/angular.js:15076:18) 
    at callback (http://play.uvgrade.com:9000/bower_components/angular/angular.js:24546:17) 
    at Scope.$eval (http://play.uvgrade.com:9000/bower_components/angular/angular.js:16820:28) 
    at Scope.$apply (http://play.uvgrade.com:9000/bower_components/angular/angular.js:16920:25) 
    at HTMLInputElement.<anonymous> (http://play.uvgrade.com:9000/bower_components/angular/angular.js:24551:23) 
    at HTMLInputElement.jQuery.event.dispatch (http://play.uvgrade.com:9000/bower_components/jquery/dist/jquery.js:4732:27) 
    at HTMLInputElement.elemData.handle (http://play.uvgrade.com:9000/bower_components/jquery/dist/jquery.js:4544:28) 

有时候,突然冒出来,就会开始工作。但它仍然会给我这样的控制台上的错误:

InvalidValueError: not an instance of HTMLInputElement 

但大多数时候它没有工作。我不应该用ng-focus调用函数吗?我试着将initAutocomplete函数放在不同的文件夹中并没有什么不同。

让我知道你是否有任何问题,或者你希望看到更多我的代码。请不要立即降级,只是要求和不适当的编辑。由于

回答

0

尝试做的引导,角方式,

$scope.getLocation = function(val) { 
    return $http.get('//maps.googleapis.com/maps/api/geocode/json', { 
     params: { 
     address: val, 
     sensor: false 
     } 
    }).then(function(response){ 
     return response.data.results.map(function(item){ 
     return item.formatted_address; 
     }); 
    }); 
    }; 
相关问题