Угловые Услуги не передавая Значение

0

Попытка получить простой случайный генератор с использованием угловых сервисов между контроллерами. Так далеко:

JS. ФАЙЛ

var myServiceModule = angular.module('myServiceModule',[]);

myServiceModule.controller('SecondController',['$scope','randomizer', function($scope,randomizer){
    $scope.initialNumber = 0;
    console.log('Initial number in second controller: ' + $scope.initialNumber);
    $scope.generateRandom = function(rng){
        console.log('called w/ ' + rng );
        $scope.initialNumber = randomizer.genRan(rng);
        console.log('Randomed: ' + $scope.initialNumber);
    }
}]);

myServiceModule.service('randomizer',[function(range){
    this.genRan = function(){
        console.log('inside genRan');
        return (Math.floor(Math.random() * range) + 1 ); 
    }
}]);

Файл HTML

<div id="second" ng-controller="SecondController">
<label>Press button to Generate a random number between 1-100:</label>
    <button ng-click="generateRandom(100);">Generate</button>
</div>

Выход моей консоли выглядит следующим образом:

  1. Начальный номер второго контроллера: 0
  2. называемый w/100
  3. внутри genRan
  4. Случайно: NaN

Должно быть передано значение, когда я вызываю службу правильно? Вместо этого я продолжаю получать NaN для значения при вызове функции службы (.genRan). Я новичок в сервисах, функция называется правильно, но почему это не значение возвращается контроллеру?

Теги:

2 ответа

2
Лучший ответ

Похоже, что range должен быть определен как параметр в функции genRan, попробуйте следующее:

myServiceModule.service('randomizer', [function() {
    this.genRan = function(range) {
        console.log('inside genRan');
        return (Math.floor(Math.random() * range) + 1 ); 
    }
}]);
  • 0
    Это сработало. Почему область действия сервисной функции не позволяет внутренней функции использовать переменную диапазона? Разве JS не распространяется наружу, пока не достигнет подходящей переменной?
  • 0
    @Jeeves Внутренняя функция использовала переменную range , просто она не определена. Это место для параметров впрыска. Например, вы можете добавить сервис под названием range.
0

Вы пропустили передачу диапазона, который передается службе внутри функции this.genRan, пожалуйста, измените свой код и передайте диапазон следующим образом:

myServiceModule.service('randomizer',[function(range){
    this.genRan = function(range){
        console.log('inside genRan');
        console.log(range);
        return (Math.floor(Math.random() * range) + 1 ); 
    }
}]);

Ещё вопросы

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