angularJS: Ошибка: $ scope не определен

0

Я хочу запустить службу, которая считывает общее непрочитанное сообщение, когда пользователь посещает несколько конкретных страниц. Я использую resolve для этого. Я создал фабрику, которая связывается с бэкэнд через HTTP-вызов, а бэкенд возвращает количество общих сообщений, и я хочу показать это на html-странице, но все, что я получаю, является ошибкой.

( function () {

    var countAllUnreads = function($location, $q, AuthService3) 
    {
        var deferred = $q.defer();
        AuthService3.fetchUnreadNotifications().then(function (res)
      {
        console.log('this is me');
        $scope.numOfNotifications =res.data.totalUnread;
      });
    }
    angular.module('myApp', [
        'ngRoute',
        'myApp.login',
        'myApp.home',
        'myApp.directory',
        'myApp.forgotpassword',
        'myApp.myProfile',
    ])

    .factory('AuthService3', ["$http", "$location", function($http, $location){
       var baseUrl = 'api/';
      var fetchUnreadNotifications = function()
       {

        return  $http.post(baseUrl + 'getAllUnreadNotifications');        
      }    

        return {fetchUnreadNotifications: fetchUnreadNotifications} ; 
    }])
    .config(['$routeProvider', function($routeProvider) {
        $routeProvider
        .when('/login', {
            controller: 'LoginController',
            templateUrl: 'app/components/login/loginView.html',     
            controllerAs: 'vm'
        })
        .when('/forgotpassword', {
            controller: 'ForgotpasswordController',
            templateUrl: 'app/components/forgotpassword/forgotpasswordView.html',
            controllerAs: 'vm'
        })
        .when('/directory/:directoryType', {
            controller: 'DirectoryController',
            templateUrl: 'app/components/directory/directoryView.html',
            resolve: {notifications:countAllUnreadsn,},     
            controllerAs: 'vm'
        })
        .when('/home', {
            controller: 'HomeController',
            templateUrl: 'app/components/home/homeView.html',
            resolve: {notifications:countAllUnreadsn,},         
            controllerAs: 'vm'          
        })
        .when('/myprofile', {
            controller: 'MyProfileController',
            templateUrl: 'app/components/profile/myProfileView.html',
            resolve: {notifications:countAllUnreadsn,},     
            controllerAs: 'vm'
        })
        .otherwise({
            redirectTo: '/login'
        });
    }]);

})();
  • 0
    где контроллер?
  • 0
    контроллеры все есть. Это файл, из которого происходит маршрутизация, и я использую решение, чтобы отправить отсюда http-вызов. Таким образом, здесь нет необходимости в контроллере, хотя для каждой страницы есть контроллер. Чтобы уменьшить двусмысленность, я не включил их. @Subash
Показать ещё 1 комментарий
Теги:
scope
angularjs-scope

1 ответ

3

Проблема в том, что вы используете $ scope внутри функции, которая загружает уведомления. $ scope будет недоступна, так как он еще не создан. Вам нужно вернуть обещание, и разрешенное значение может быть введено как зависимость от контроллера.

var countAllUnreads = function($location, $q, AuthService3) 
    {
        var deferred = $q.defer();
        AuthService3.fetchUnreadNotifications().then(function (res)
      {       
        deferred.resolve(res.data.totalUnread);
      });

       return deferred.promise;
    };

И в ваших контроллерах есть зависимость от "уведомлений".

Ex: function HomeController($scope, $http, notifications){ }
  • 0
    Что вы подразумеваете под зависимостью для уведомлений? Должно ли это быть услуга или звонок. я думаю нет. Или есть способ, которым я могу сохранить это в контроллере? @Sarathy
  • 0
    Не уверен, как вы объявляете свои контроллеры. Точно так же, как $ http, $ scope, вам нужно добавить дополнительный параметр под названием «уведомления» для контроллера, который должен совпадать с именем свойства, указанным в конфигурации вашего маршрута для «разрешения». Посмотрите на пример для HomeController, который я привел в ответе. Результат вашего вызова службы в методе countAllReads будет введен Angular как «уведомления». Нет необходимости в дополнительном сервисном звонке.
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню