ng-click вызывает внешний контроллер из вложенных ng-контроллеров

Я пытаюсь использовать angularjs для создания страницы, которая делает следующее:

  1. Изначально пусто, за исключением выпадающего списка, который автоматически заполняется приложениями.
  2. после выбора одного из этих приложений данные о нем будут вызываться с другого контроллера на страницу.

Мне удалось получить выпадающий список для автоматического заполнения. Тем не менее, у меня возникают проблемы с получением страницы для создания с помощью ng-click, что связано с вложенными ng-контроллерами. Может кто-нибудь мне помочь? Код ниже:

Моя главная страница HTML. Обратите внимание на использование ng-init:

    <div ng-controller="chartsuccessfulapploginsController">
        <div ng-controller="allappsController" ng-init="add()">
            <form name="myForm">
                <label for="repeatSelect"> Repeat select: </label>
                <select name="repeatSelect" id="repeatSelect" ng-model="data.repeatSelect" ng-change="chartsuccessfulapploginsController.add(value)">
            <option ng-repeat="option in data.availableOptions" ng-init="Index = $index"  value="{{data.availableOptions[Index].id}}" ng-model="APPID" >{{data.availableOptions[Index].name}}</option>
        </select>
            </form>
            <hr>
            <p> {{data}}</p>
            <p> {{data.id[0]}}</p>
            <p> {{data.name[0]}}</p>

            <tt>repeatSelect = {{data.repeatSelect}}</tt><br/>
        </div>
        <p>{{returnCount}}</p>
        <table border = "1">
            <tr>
                <td>{{chartObject.data}}</td>
                <td>{{returnCount}}</td>

            </tr>
        </table>
        <div google-chart chart="chartObject" style="height:600px; width:100%;"></div>
    </div>

Мой получить все приложения контроллера. HTML-страница выше полагается на это, чтобы заполнить выпадающий список.

angular.module('scotchApp').controller('allappsController',['$scope', function($scope){
    var userurl='';
    $scope.add = function(){

        userurl = 'http://localhost:8085/rest/uafapp/appslist';
        var userdata = {};
        var userconfig =
        {
            headers: {
                'Content-Type':'application/json'
            }
        };
        var userPostRequest = $.get(userurl, userdata, userconfig);
        var userjson = '{\"USER_DATA_RETRIEVED\" : \"fail\"}';
        userPostRequest.done(function(userdata){

            userjson = JSON.stringify(userdata);
            console.log("userjson :: " + userjson);

            var postResponse = jQuery.parseJSON(userjson);
            $scope.returnName = postResponse['apps'];
            var availableOptionsArray = [];

            for(i = 0; i < postResponse['apps'].length; i++){
                var availableOptions = {};
                availableOptions['id'] = postResponse['apps'][i]['appId'];
                availableOptions['name'] = postResponse['apps'][i]['appName'];
                availableOptionsArray[i] = availableOptions; 
            }
            var returnData = {};
            returnData['repeatSelect'] = null;
            returnData['availableOptions'] = availableOptionsArray;

            $scope.data = returnData;
            console.log($scope.returnData);
            $scope.$apply()
        });

    };
}]);

Часть контроллера, которая определяет график. Это довольно долго, поэтому я не включил неактуальный код.

   angular.module('scotchApp').controller('chartsuccessfulapploginsController',['$scope','$route','$http','AuthTokenService', function($scope, $route, $http, AuthTokenService){
        var appurl = '';
        var failedappurl= '';

        $scope.add = function(APPID) {

...}

1 ответ

Я думаю, что проблема в вашем <option> тег. ng-click не будет работать с этим тегом. Согласно документации, попробуйте использовать ng-change с тегом выбора как:

<select name="repeatSelect" id="repeatSelect" ng-model="data.repeatSelect" ng-change="functionToBeCalledWhenValueChanges(yourBindedElementValue)">

Надеюсь, это решит вашу проблему.

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