Не удается получить доступ к переменным $ scope после изменения представления с помощью $ location.path - PullRequest
0 голосов
/ 05 января 2019

Я пытаюсь получить доступ к данным, находящимся в области действия $, в представлении, где приложение приземляется после нажатия кнопки, но создается впечатление, что после использования $ location.path (url) для перенаправления приложение не видит приложение. переменная, которая больше существует в области $.

Форма с кнопкой:

<form ng-submit="getBrokenProbes()">
            <table class="table table-striped">
                <tr>
                    <th>Bmonitor</th>
                    <th>Select Bmonitor</th>

                </tr>
                <tr ng-repeat="bmonitor in bmonitors">
                    <td>
                        <span>{{bmonitor.domainName}}</span>
                    </td>
                    <td>
                        <button class="btn btn-primary" ng-click="getBrokenProbes(bmonitor)">Request</button>
                    </td>
                </tr>
            </table>
        </form>

Контроллер:

app.controller('logmeinValidationCtrl', ['$scope','$http', '$location', function($scope,$http, $location){

        $scope.bmonitors = {};

        $scope.brokenProbes = {};

        $http.get('http://localhost/getBmonitors').success(function (data) {
            $scope.bmonitors = data;
            console.log($scope.bmonitors);
        });

        $scope.getBrokenProbes = function(bmonitor) {
            let url = 'http://localhost/getBrokenProbes';
            $http.post(url, bmonitor).then(function (response) {
                $scope.brokenProbes = response.data.hosts;
                console.log($scope.brokenProbes);
                $scope.showBrokenProbes();
            })
        };

        $scope.showBrokenProbes = function () {
            $location.path('/logmeinValidationResult')
        }

    }]);

Я пытаюсь показать, что данные в другом представлении, но $ scope.brokenProbes недоступен в logmeinValidationResult.html (страница, на которой я приземляюсь после $ location.path), поэтому просто показывает пустую таблицу.

logmeinValidationResult.html

<table class="table table-striped">
        <tr>
            <th>Probe name</th>
        </tr>
        <tr ng-repeat="probe in brokenProbes">
            <td>
                <span>{{probe.description}}</span>
            </td>
        </tr>
    </table>

Новый контроллер страницы:

app.controller('logmeinValidationResultCtrl', ['$scope', function($scope){
        console.log($scope.brokenProbes); //This yields undefined
    }]);

1 Ответ

0 голосов
/ 05 января 2019

I) Переменная $scope.brokenProbes принадлежит контроллеру logmeinValidationCtrl, где определяется ... Чтобы использовать его внутри другого контроллера, вы должны передать его - широковещательно.

OR

II) Другое (лучшее) решение - когда пользователь перенаправляется на logmeinValidationResult, вы можете вызвать API, получить данные и присвоить переменной $scope.brokenProbes.

В этом случае ваш старый контроллер должен выглядеть так:

app.controller('logmeinValidationCtrl', ['$scope','$http', '$location', function($scope,$http, $location){

    $scope.bmonitors = {};

    $http.get('http://localhost/getBmonitors').success(function (data) {
        $scope.bmonitors = data;
        console.log($scope.bmonitors);
    });

    $scope.getBrokenProbes = function(bmonitor) {

       $location.path('/logmeinValidationResult/' + bmonitor); // Pass bmonitor to the result here so you can call the api with that parameter later on

    };

}]);

А вот как должен выглядеть ваш новый контроллер страницы:

app.controller('logmeinValidationResultCtrl', ['$scope','$http', '$routeParams', function($scope,$http, $routeParams){

        $scope.brokenProbes = [];

        let url = 'http://localhost/getBrokenProbes';
        let bmonitor = $routeParams.bmonitor; // Get passed bmonitor value from the route params

        $http.post(url, bmonitor).then(function (response) {
            $scope.brokenProbes = response.data.hosts;
            console.log($scope.brokenProbes);
        })
}]);

И не забудьте зарегистрировать параметр маршрута bmonitor на свой $ routeProvider или любой другой используемый вами ...

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