Angular JS / PHP- может читать данные из базы данных, но ng-click не работает - PullRequest
0 голосов
/ 25 сентября 2018

Теперь я могу прочитать PictureName из базы данных и показать его в браузере.(Рисунок ниже: черный блок слева) Picture

И что я хочу сделать, это то, что, когда вы нажимаете на одну из строк (например, рис. 1), он будет срабатыватьфункция change () .

Но что бы я ни пытался, функция change () не работает.Что я должен сделать с моим кодом?Спасибо за ответы и предложения.:)

read.php

<?php    
require 'lib.php';    
$object = new CRUD();

// table header
$data = '<table style="border-collapse:separate; border-spacing:0px 10px;">
            <tr>
                <th>No. </th>           
                <th>PictureName</th>
            </tr>';

// table body

$picturetb = $object->Read();

if (count($picturetb) > 0) {
    foreach ($picturetb as $key=>$picture) {
        $data .= '<tr ng-click="change()">
                <td>' . $key . '</td>
                <td><a>' . $picture['Picture_Name'] . '</a></td>            
            </tr>';
    }
}

$data .= '</table>';
echo $data;
?>

angular.js

var mainApp = angular.module("mainApp", []);
mainApp.controller('MyController', function ($scope) {

    $scope.readRecords = function () {
        $.get("ajax/read.php", {}, function (data, status) {            
            $(".addPicture").html(data);
        });
    }

    $scope.change = function () {
        console.log("do click");
    }
}

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Вы все еще можете это сделать, если настаиваете на получении таблицы из базы данных.Вот что вам нужно сделать.

-Снова запустить угловой цикл дайджеста вручную.После загрузки таблицы.

Ниже приведен код: -

$timeout(function () { 
var injector = $('[ng-app]').injector();
var $compile = injector.get('$compile');
var $rootScope = injector.get('$rootScope');
$compile(this.$el)($rootScope);
$rootScope.$digest();
},0);

$timeout со временем 0 запустит цикл дайджеста вправо.

Но я лично предложу@davidkonrad ответ.

0 голосов
/ 25 сентября 2018

Ну, вы могли бы использовать $compile, но в целом это очень, очень плохая идея внедрить разметку таким образом.Почему бы не вернуть ключ / изображение в формате JSON:

$arr = [];
foreach ($picturetb as $key=>$picture) {
  $arr[] = array('key' => $key, 'picture' => $picture['Picture_Name']);
}
echo json_encode($arr);

Получить его следующим образом

$scope.readRecords = function () {
  $.get("ajax/read.php", {}, function (data, status) {            
    $scope.data = data;
  });
}

На ваш взгляд:

<table style="border-collapse:separate; border-spacing:0px 10px;">
  <thead>
    <tr>
      <th>No. </th>           
      <th>PictureName</th>
    </tr>
  </thead>
  <tbody>
    <tr ng-click="change()" ng-repeat="d in data">
      <td> {{ d.key }} </td>
      <td><a> {{ d.picture }} </a></td>
    </tr>
  </tbody>
</table>
...