Hi,
I’m officially stumped. Searched and examined every line and unable to get this working. I have a live Angular search field that gets its data from the factory. It’s throwing an error though: TypeError: Cannot read property ‘then’ of undefined. It’s coming from ‘.then’ in the first controller. What am I doing wrong?
var myApp = angular.module('myApp', ['ngRoute']);
myApp.config(function ($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'pages/main.html',
controller: 'vehicleController'
})
.when('/:firstName', {
templateUrl: 'pages/driverData.html',
controller: 'profileController'
})
});
myApp.controller('vehicleController', ['$scope', 'truckData', function($scope, truckData) {
truckData.getTrucks().then(function(trucks) {
$scope.vehicleSearch = trucks;
}, function(err){ $scope.vehicleSearch = err; });
}]);
myApp.controller('profileController', ['$scope', '$routeParams', 'truckData', function($scope, $routeParams, truckData) {
var vehicleNumber = $routeParams.vehicle;
truckData.getTruckDriver(vehicleNumber).then(function (truck) {
$scope.model = truck
});
}]);
myApp.factory('truckData', ['$q', function ($q) {
var truckData = {}; //............................................EMPTY OBJECT
truckData.drivers = [ //..........................................FILL EMPTY OBJECT W/ ARRAY OF DRIVERS
{
firstName: "John",
lastName: "Doe",
company: "Company XYZ",
vehicle: "1234"
},
{
firstName: "Jane",
lastName: "Doe",
job: "Designer",
vehicle: "5678"
},
{
firstName: "Jake",
lastName: "Doe",
job: "Designer",
vehicle: "9012"
}
];
var getTruckDriver = function(vehicleNumber) { //........................getTruckDriver(vehicleNumber)
var deferred = $q.defer(); //.......................................deferred is a promise
for (var i = 0; i++; i < truckData.drivers.length) { //.............loop through all the drivers
if (truckData.drivers[i].vehicle === vehicleNumber) { //.......is driver vehicle number equals vehicle number is true?
deferred.resolve(truckData.drivers[i]); //.................here's the results — no problems
}
}
deferred.reject("Not found!"); //...................................errors found
//return deferred.promise; //returns a fake promise
}
var getTrucks = function() {
var deferred = $q.defer();
deferred.resolve(truckData);
return deferred.promise;
}
return {
getTrucks: getTruckDriver,
getTruckDriver: getTruckDriver
}
}]);