Ошибка AngularJS, «Не удается прочитать свойство unknown» - PullRequest
0 голосов
/ 06 октября 2018

Я пытаюсь создать фабрику для получения данных о погоде для простой веб-страницы, которую я создаю, но я застреваю при попытке вызвать функцию на фабрике.Я прошел курс Дэна Уолина по Удеми, но я просто не могу понять, почему я получаю ошибку.Похоже, что я делаю что-то не так, но не могу понять.Вот код

HTML

<!DOCTYPE html>

<div ng-controller="WeatherController" style="position:absolute; top:0px; ">
    {{weather.weather.main}}<br>
    <img src='http://openweathermap.org/img/w/10d.png' height="100px" width="100px">
</div>

<div style="background-color:white; position: absolute; bottom:0px;">
    <canvas id="canvas" width="400" height="400">
    </canvas>
</div>

<script src="script/angular.min.js"></script>
<script src="app/app.js"></script>
<script src="app/services/WeatherFactory.js"></script>
<script src="app/controllers/WeatherController.js"></script>
<script src="script/clock.js"></script>

app.js

(function () {
angular.module('displayApp', []);

} ​​());

WeatherController.js

(function () {

var WeatherController = function ($scope, $log, $http, weatherFactory) {
    $scope.weather = "";

    function init() {            
        weatherFactory.getWeather() //******This line stops with error*****
            .then(function (response) {
                $scope.weather = response.data;
            }, function (data, status, headers, config) {
                $log.log(data.error + ' ' + status);
            });

        // $scope.weather = "Get the weather?"
    }

    init();

};

WeatherController.$inject = ['$scope', 'weatherFactory'];

angular.module('displayApp').controller('WeatherController', WeatherController);

}());

WeatherFactory.js

(function () {
var weatherFactory = function ($http) {

    var factory = {};

    factory.getWeather = function () {
        //return $http.get('api.openweathermap.org/data/2.5/weather?q=Rancho Santa Margarita&appid=60f84f7ee9256ef5057de8b616105ab9');
        return "Get the weather";
    };

    return factory;
};

weatherFactory.$inject = ["$http"];

angular.module('displayApp').factory('weatherFactory', weatherFactory);

} ());

Конкретная ошибка Невозможно прочитать свойство 'getWeather' из undefined at init (WeatherController.js: 17)

Что мне не хватает или что я делаю неправильно?

Любая и вся помощь приветствуется.Спасибо.

1 Ответ

0 голосов
/ 06 октября 2018

Вам не хватает нескольких уколов.В настоящее время у вас есть:

WeatherController.$inject = ['$scope', 'weatherFactory'];

И ваши аргументы $scope, $log, $http, weatherFactory.Просто добавьте недостающие уколы:

WeatherController.$inject = ['$scope', '$log', '$http', 'weatherFactory'];
...