ng-click вызывает внешний контроллер из вложенных ng-контроллеров
Я пытаюсь использовать angularjs для создания страницы, которая делает следующее:
- Изначально пусто, за исключением выпадающего списка, который автоматически заполняется приложениями.
- после выбора одного из этих приложений данные о нем будут вызываться с другого контроллера на страницу.
Мне удалось получить выпадающий список для автоматического заполнения. Тем не менее, у меня возникают проблемы с получением страницы для создания с помощью 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)">
Надеюсь, это решит вашу проблему.