2016-11-25 13 views
0

Я разрабатываю приложение, которое должно вызывать контроллер, где есть некоторые функции, потому что я получаю с сервера (localhost в этот момент) массив JSON со структурой вроде этого:Функция не выполняется в контроллере и на заводе

[{ 
    "day": "17/11/2016", 
    "time": "09:45" 
    }, { 
    "day": "17/11/2016", 
    "time": "16:50" 
    }, { 
    "day": "18/11/2016", 
    "time": "11:25" 
    }, { 
    "day": "18/11/2016", 
    "time": "12:30" 
    }, { 
    "day": "21/11/2016", 
    "time": "16:10" 
    }, { 
    "day": "21/11/2016", 
    "time": "17:25" 
    }] 

И затем я напечатать ее в двух выбирает в форме, таким образом:

ВЫБОР 1: 17/11/2016, 18/11/2016, 21/11/2016

ВЫБРАТЬ 2: 9:45, 16:50 ИЛИ 11:25, 12:30 ИЛИ 16:10, 17:25 на основе выбора в первом выберите

До сих пор там нет проблем, но теперь он должен выполнить функцию, которая размещает кузницу пользователя на сервере, но приложение не выполняет его.

Это мой код,

script.js

angular 
    .module('demo', []) 
    .controller('DefaultController', DefaultController) 
    .factory('dataService', dataService); 

DefaultController.$inject = ['dataService']; 

function DefaultController(dataService) { 
    var vm = this; 

    getEvents(); 

    function getEvents() { 
    return dataService.getEvents() 
     .then(function (data) { 
     vm.data = data; 
     return vm.data; 
     }); 
    } 
} 

dataService.$inject = ['$http']; 

function dataService($http) { 
    var service = { 
    getEvents: getEvents 
    }; 

    return service; 

    function getEvents() { 
    var config = { 
     transformResponse: function (data, headers) { 
     var result = { 
      events: [], 
      schedules: [] 
     }; 
     var events = JSON.parse(data); 
     var dates = []; 
     for (var i = 0; i < events.length; i++) { 
      if (dates.indexOf(events[i].day) === -1) { 
      var date = events[i].day; 
      dates.push(date); 
      result.events.push({ 
       date: date 
      }); 
      } 

      result.schedules.push({ 
      date: events[i].day, 
      time: events[i].time 
      }); 
     } 

     return result; 
     } 
    }; 

    return $http.get('http://<path>/api/apiTimes.php', config) 
     .then(getEventsCompleted) 
     .catch(getEventsFailed); 

    function getEventsCompleted(response) { 
     return response.data; 
    } 

    function getEventsFailed(error) { 
     console.error(error); 
    } 
    } 
} 
console.log("fine"); 

function submit ($http){ 
    console.log("funzione"); 
    var data = {}; 
    console.clear(); 
    var link = 'http://<path>/api/apiFix.php'; 
    var mail = window.localStorage.getItem("mail"); 
    $http.post(link, {giorno: data.giorno, ora: data.ora, mail: mail}) 
     .then(function (res){ 
      console.log("Dentro http.post"); 
      var response = res.data; 
      console.log(response); 
     }); 
} 

ФОРМА HTML:

<body ng-app="demo" ng-controller="DefaultController as ctrl"> 
       <form ng-submit="submit()"> 
        <div class="list"> 
         <label class="item item-input item-select"> 
          <div class="input-label"> 
           Giorno: 
          </div> 
          <select ng-options="event as event.date for event in ctrl.data.events" ng-model="data.giorno"> 
           <option disabled>Seleziona un giorno </option> 
          </select> 
         </label> 
        </div> 
        <div class="list"> 
         <label class="item item-input item-select"> 
          <div class="input-label"> 
           Ora: 
          </div> 
          <select ng-options="schedule as schedule.time for schedule in ctrl.data.schedules | filter: { date: data.giorno.date}" ng-model="data.ora" ng-disabled="!data.giorno"> 
           <option disabled>Seleziona un orario </option> 
          </select> 
         </label> 
        </div> 
       </div> 
      </div><br> 
      <ul class="list"> 
       <li class="item item-toggle"> 
        &Egrave un'urgenza? 
        <label class="toggle toggle-assertive"> 
         <input type="checkbox"> 
         <div class="track"> 
          <div class="handle"></div> 
         </div> 
        </label> 
       </li> 
      </ul> 
      <div align="center"> 
       <input class="button button-calm" type="submit" name="submit" value="Prenota !">    
      </div> 
     </form> 
    </body> 

У меня нет никаких ошибок в консоли, но функции "отправить" это не выполняется.

Как я могу решить эту проблему?

Thank's

+0

submit не находится в контроллере, и вы должны использовать его как ctrl.submit(). – taguenizy

+0

спасибо, как я могу назвать эту функцию? @taguenizy – Edoardo

+0

Я отправил ответ с тремя обнаруженными мной ошибками. Посмотрите и дайте мне знать, если у вас есть какие-либо дальнейшие проблемы. – taguenizy

ответ

0

У вас есть пара ошибок. Вы должны установить по крайней мере, эти

На контроллере (вам нужно будет вводить $http)

DefaultController.$inject = ['dataService', '$http']; 

function DefaultController(dataService, $http) { 
    var vm = this; 
    vm.submit = function(){ 
     console.log("funzione"); 
     var data = vm.form; // IMPORTANT 
     console.clear(); 
     var link = 'http://<path>/api/apiFix.php'; 
     var mail = window.localStorage.getItem("mail"); 
     $http.post(link, {giorno: data.giorno, ora: data.ora, mail: mail}) 
      .then(function (res){ 
       console.log("Dentro http.post"); 
       var response = res.data; 
       console.log(response); 
      }); 
    }; 
} 

И в вашей форме, как я упоминаю в комментарии, так как вы используете controller as подход, что вам нужно включают ctrl

<form ng-submit="ctrl.submit()"> 

И переименовывать ng-model переменные

ng-model="ctrl.form.ora" //ng-model="data.ora" 
ng-model="ctrl.form.giorno" //ng-model="data.giorno" 
+0

спасибо, это работает, но теперь у меня есть другой вопрос, как можно отправить серверу на выбор? с моим кодом я отправляю все возможные варианты – Edoardo

+0

Это отражено на 'ng-model'. Это должно быть в 'vm.data' при отправке, если что-то было выбрано. Не могли бы вы предоставить более подробную информацию? – taguenizy

+0

Я тестирую его, выбрав день и время и от сервера отпечатайте приложение (ответ), что он получает от приложения, а результат в консоли - это то, что у меня есть все данные в двух вариантах: – Edoardo