Angular JS / PHP- может читать данные из базы данных, но щелчок ng не работает

Теперь я могу прочитать PictureName из базы данных и показать его в браузере. (Изображение ниже: черный блок слева) Angular JS / PHP- может читать данные из базы данных, но щелчок ng не работает

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

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

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.info("do click");
    }
}
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
68
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Ну, вы, мог, используете $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>

Большое спасибо. Я попробовал ваше предложение. Он произвел массив правильно. (что я проверил с помощью /**console.info($scope.datadata); /) Но теперь, на мой взгляд, он показывает только <thead>, а <tbody> ничего не показывает. И я думаю / <tr ng-click = "change ()" ng-repeat = "d in data"> * / здесь тоже правильно. У меня нет идея о том, почему не показывать ...

FJF 25.09.2018 17:22

Вы случайно не забыли подключить контроллер с разметкой? У вас должна быть разметка, завернутая в <body ng-controller = "MyController"> ... </body> или <div ng-controller = "MyController"> ... </div>, и поместить ваш <table> внутрь этого <div> ...

davidkonrad 25.09.2018 17:33

Я использовал <ng-controller>. Я думаю, что $scope.data = data; - это объект JSON. Поэтому я использую JSON.parse(data) для преобразования текста в объект JavaScript. И он по-прежнему ничего не показывает.

FJF 26.09.2018 03:20

После этого я оборачиваю изменения в функции $scope.$apply. и это работает. Итак, моя проблема решена. Спасибо!

FJF 26.09.2018 09:39

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

-Запустите цикл дайджеста angular снова вручную. После загрузки вашего стола.

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

$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.

Другие вопросы по теме