Передать JSON в угловой контроллер - PullRequest
0 голосов
/ 18 мая 2018

Я хочу передать файл json или объект в угловой контроллер, чтобы использовать его с ng-repeat.

Мой объект json хранится в моем файле index.js и записывается в data.json.Мой файл controller.js выглядит следующим образом:

var fs = require('fs');

var jobs = fs.readFile('out/data.json', 'utf-8', (err, data) => {
    if (err) throw err;
});

angular.module('slrm', [].controller('slrmctrl', function($scope) {
    $scope.data = jobs.data;
}));

И это мой HTML-файл:

<table class="table">
        <thead>
            <th scope="col">#</th>
            <th scope="col">JOBNAME</th>
            <th scope="col">USER</th>
            <th scope="col">NODE</th>
            <th scope="col">CPUS</th>
            <th scope="col">START</th>
            <th scope="col">STATE</th>
            </thead>
            <tbody ng-app="slrm" ng-controller="slrmctrl">
                <tr ng-repeat="x in data | orderBy : 'JOBID'">
                    <td>{{ x.JOBID }}</td>
                    <td>{{ x.NAME }}</td>
                    <td>{{ x.USER }}</td>
                    <td>{{ x.NODELIST }}</td>
                    <td>{{ x.CPUS }}</td>
                    <td>{{ x.STATE }}</td>
                    <td>{{ x.REASON }}</td>
                </tr>
            </tbody>
    </table>
    <script src="js/controller.js"></script>

Теперь у меня есть 2 вопроса.Я предоставляю этот HTML с:

app.get('/', function (req, res) {
    res.sendFile(__dirname + '/view/index.html');
});

var server = app.listen(3000, function() {
    console.log('Server running');
};

Является ли файл controller.js даже импортированным?потому что bootstrap.css не импортируется каким-либо образом.

Другой вопрос, если строка

$scope.data = jobs.data;

даже работает?Должен ли я прочитать файл или использовать экспортированный объект из index.js?Как мне экспортировать только этот один объект?

Я построил это с нуля, потому что я новичок в js и прочем.

Спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Я думаю, что проблема заключается в объявлении вашего модуля и контроллера.При объявлении модуля вы должны сначала создать его экземпляр, передав его зависимости.

angular.module('slrm', []);

После этого вы можете подключить контроллер к модулю

angular.module('slrm').controller('slrmctrl', function($scope) { $scope.data = jobs.data; }));

Во-вторых, вместо внешнего чтения объекта data.json и его передачи контроллеру, почему бы вам не прочитать данные внутри контроллера?

angular.module('slrm').controller('slrmctrl', ['$scope', '$http', function($scope, $http) {
    $http.get('out/data.json')
        .then(function(response) {
            $scope.data = response.data;
        }); 
}]);

РЕДАКТИРОВАТЬпоказать пример реализации таймера (опроса)

angular.module('slrm').controller('slrmctrl', ['$scope', '$http', '$timeout', function($scope, $http, $timeout) {
    $scope.refreshInterval = 900; // Sec (15 Minutes)

    $scope.getData = function () {
        $http.get('out/data.json')
            .then(function(response) {
                $scope.data = response.data;

                return $timeout($scope.getData, $scope.getTimeLeftToRefresh());
            }); 
    };

    $scope.getTimeLeftToRefresh = function () {
        var now = new Date();
        var timeLeftToRefresh = ($scope.refreshInterval - (now.getMinutes() * 60 + now.getSeconds()) % $scope.refreshInterval) * 1000;

        return timeLeftToRefresh;
    };

    // Initial call to start the loop
    $scope.getData();

}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...