【问题标题】:ng-click calling outer controller from nested ng-controllersng-click 从嵌套的 ng-controllers 调用外部控制器
【发布时间】:2016-06-22 16:47:04
【问题描述】:

我正在尝试使用 angularjs 创建一个执行以下操作的页面:

  1. 最初为空,保存为自动下拉列表 填充了应用程序。
  2. 在选择其中一个应用程序时,将从中调用有关它的数据 页面的另一个控制器。

我成功地让下拉列表自动填充。但是,我在使用 ng-click 制作页面时遇到问题,我认为这是由于嵌套的 ng-controllers 造成的。谁能帮我?代码如下:

我的主要 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) {

...}

【问题讨论】:

  • 那部分应该做什么? value="{{data.availableOptions[Index].id ng-click="chartsuccessfulapploginsController.add(data.availableOptions[Index].id)"}} 为什么ng-click{{}} 表达式下?
  • 哎呀。编辑。现在它应该更有意义了。 @BotanMan
  • 在任何情况下,最好使用 ng-options 指令来正确处理选择,并使用 ng-model + ng-change 来跟踪更新docs.angularjs.org/api/ng/directive/ngOptions

标签: javascript angularjs angularjs-ng-click ng-init


【解决方案1】:

我认为问题出在您的&lt;option&gt; 标记中。 ng-click 不适用于 this 标签。根据documentation,尝试使用ng-change,选择标签为:

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

希望这能解决您的问题。

【讨论】:

  • 不幸的是,没有。更新以反映变化。
  • 如我所见,您使用了ng-change&lt;option&gt;。在&lt;select&gt; 标签内使用它。
  • 你调试过你的代码吗?你看到你的函数chartsuccessfulapploginsController 被调用了吗?如果是,它应该是什么,那么函数内部捕获的value 变量是什么?
  • 这不是函数的名称。这是控制器的名称。 add 是我试图在该控制器中调用的函数的名称。
  • chartsuccessfulapploginscontroller,即。
猜你喜欢
  • 2023-03-21
  • 2016-05-02
  • 1970-01-01
  • 2014-09-08
  • 1970-01-01
  • 2015-10-27
  • 2017-03-23
  • 1970-01-01
  • 2014-07-06
相关资源
最近更新 更多