2016-06-03 4 views
0

У меня есть код с AngularJS, который должен получить данные в форме частичного, а затем возвращать таблицу с соответствующими результатами в базе данных MySQL любая идея, как это исправитьМаршруты в угловом и PHP/MySQL

Первый частичный вид:

<form> 
      <div class="row"> 
       <div class="input-field col s12"> 
       <input id="seacrh" autofocus type="text" class="validate" ng-model="searching.name" required> 
       <label for="search">Search</label> 
       </div> 
      </div> 
      <div class="row"> 
       <div class="col s12"> 
       <button class="waves-effect waves-yel btn btnSearch col s12" ng-click="searchingElement()"><i class="fa fa-search icoSrch"></i></button> 
       </div> 
      </div> 
     </form> 

Второй частичный стол:

<tr ng-repeat="element in elements"> 
       <td>{{element.name}}</td> 
       <td>5</td> 
       <td><button class="waves-effect waves-light btn blue">Details</button></td> 
       </tr> 

является ли, что код PHP работает, потому что зонд на консоли, но вот:

<?php 
     $data = json_decode(file_get_contents("php://input")); 
     $name = $data->name; 
     $conn = new mysqli("localhost", "user", "pass","DBName"); 
     $sql = "SELECT `elements`.name FROM `elements` WHERE `elements`.name='$name'"; 
     $result = $conn->query($sql); 
     $array = array(); 

     while($row = $result->fetch_assoc()) { 
     $array[] = array(
     'name' => $row['name'] 
    );} 
     echo json_encode($array); 
    ?> 

app.js здесь маршруты и контроллер, который я использую:

var app = angular.module('haku_app',['ngRoute']) 

    app.config(function($routeProvider){ 
     $routeProvider 
     .when('/',{ 
     templateUrl: "partials/home.html", 
     controller: 'srchCtrl' 
     }) 
     .when('/results',{ 
     templateUrl: "partials/results.html", 
     controller: 'srchCtrl' 
     }) 
     .otherwise({ 
     redirectTo: '/' 
     }); 
    }); 

    app.controller('srchCtrl',function($scope, $http){ 
     $scope.serchingElemento= function(){ 
     $http.post("php/search.php",{'name':$scope.searching.name}).success(function(data){ 
      $scope.tiendas= data; 
      location.href += 'results'; 
     }).error(function(response){ 
      console.log(response); 
     }); 
     } 
    }); 
+0

3 Вопросы: Является ли таблица результатов частью частичной или частично закрывается и таблица в обычном режиме? Какое сообщение об ошибке вы получаете в консоли? Вы уверены, что ваша функция php возвращает данные? (Эти последние вопросы особенно полезны при отладке, т. Е. Проблема на сервере или клиенте.) – Paul

+0

Таблица находится в частичном названии результатов, форма находится в частичном названии дома, когда я нажимаю кнопку дома с элемент поиска функции выполняет функцию этой функции через php и изменяет частичные результаты, показывая там информацию (которой нет). Консоль не показывает ошибок. Функция Php возвращает информацию, я попробовал consol.log() и setInterval, чтобы узнать, не удалена ли информация при загрузке другого частичного и всегда отображает информацию. –

+0

Поскольку я не видел весь ваш код, я просто угадываю здесь.Я считаю, что контроллер srchCtrl только в форме, а не в таблице. Таким образом, данные возвращаются, но к тому времени, когда они вернутся, представление уже находится в таблице, поэтому данные никогда не отображаются. Лучшим решением, вероятно, является создание службы для обмена данными через 2 контроллера. (форма и таблица). Это был бы самый «угловой» способ сделать это. Вы используете ui-bootstrap? – Paul

ответ

0

Я думаю, что есть две вещи, происходящие. Во-первых, поскольку вы используете ngRoute, вы должны использовать $location.path() для изменения видов. Так что в вашем случае: $location.path() = '/results'; вместо location.href = 'results';. Ознакомьтесь с примерами в документации: https://docs.angularjs.org/api/ngRoute/service/ $ route.

ДО того, как вы это делаете, вам необходимо сохранить значения результата почтового вызова для службы. Услуги в Angular - это синглтоны, то есть вы можете сохранять данные между представлениями, независимо от того, используете ли вы один и тот же контроллер. Существует множество примеров того, как писать угловое обслуживание, поэтому я не буду повторять его. Вот отличный пример: AngularJS - Passing data between pages.

Так что ваша логика будет идти:

  1. Сделать запись вызова
  2. В функции обратного вызова, за исключением почтовых данных на службу
  3. Изменить вид с помощью $ location.path()
  4. В новом представлении , извлечение данных из службы в контроллер и рендеринг в представлении.

Если вы действительно хотите сделать несколько видов и вложенных представлений, проверьте ui-router: https://github.com/angular-ui/ui-router. Это сложнее, чем ngRoute. Однако я не думаю, что вам это нужно. Но если вы работаете над более сложным приложением, это может оказаться полезным.

Наконец, я заметил, что ваш контроллер говорит $route.tiendas = data, но ваше мнение говорит element in elements. Убедитесь, что вы используете правильные имена переменных.

Надеюсь, это поможет.