Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 如何在使用ui路由器时捕获更改事件以更新控制器/数据;控制器为;语法?_Angularjs - Fatal编程技术网

Angularjs 如何在使用ui路由器时捕获更改事件以更新控制器/数据;控制器为;语法?

Angularjs 如何在使用ui路由器时捕获更改事件以更新控制器/数据;控制器为;语法?,angularjs,Angularjs,我相信对于开明的人来说,这是一个相当基本的问题 我使用Angular 1.4.x、ui路由器(0.2.15)和控制器作为语法 应用程序/页面显示特定业务领域的美元金额,并有两个下拉框用于过滤数据(过滤器在web请求中发送到服务,并从服务器检索新数据) 我有第一个页面加载工作,我从最初的web服务调用中获取数据,但我不知道如何从下拉框中捕获更改事件并使其重新加载/刷新控制器/数据 (为了清楚起见,我在下拉框中使用了Choosed by Harvest.“Selected Select”。在后端使用

我相信对于开明的人来说,这是一个相当基本的问题

我使用Angular 1.4.x、ui路由器(0.2.15)和控制器作为语法

应用程序/页面显示特定业务领域的美元金额,并有两个下拉框用于过滤数据(过滤器在web请求中发送到服务,并从服务器检索新数据)

我有第一个页面加载工作,我从最初的web服务调用中获取数据,但我不知道如何从下拉框中捕获更改事件并使其重新加载/刷新控制器/数据

(为了清楚起见,我在下拉框中使用了Choosed by Harvest.“Selected Select”。在后端使用的是ASP.Net MVC 5。)

这是我的控制器:

.controller('AppModulesController', function (UserAppModulesService, $scope, $state) {
var appModulesController = this;

appModulesController.GetData = function () {

    var csCostCenter = $("#costcenter.chosen-select").val();
    var csProvName = $("#providername.chosen-select").val();
    var csProvSpec = $("#providerspecialty.chosen-select").val();
    var csProvStatus = $("#providerstatus.chosen-select").val();
    var csProvSpecType = $("#providerspecialtytype.chosen-select").val();


    // Create a WebRequestObj
    var wro = new WebRequestObj(
        "noname",
        "Cube_MS12",
        [], // the ASP.Net MVC controller selects the Measures, so those will not need to be set here
        [], // this request requires no dimensions
        [new filterObj("[MS Dim Service Date].[Dtof Svc Year Month]", ["CURRENT"])]
    );


    // get the current value of the Chosen Select Filters, and add the values to the WebRequestObj
    if (csCostCenter !== null) { wro.filters.push(new filterObj("[MS Dim Cost Center].[Cost Center Name]", csCostCenter)); }
    if (csProvName !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Name]", csProvName)); }
    if (csProvSpec !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Specialty]", csProvSpec)); }
    if (csProvStatus !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Status]", csProvStatus)); }
    if (csProvSpecType !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Specialty Type]", csProvSpecType)); }


    //send request
    var json = JSON.stringify(wro);
    appModulesController.userAppModules = UserAppModulesService.query({ json: json });  //.$promise.then();
}


appModulesController.GetData();

});
$(document).on("ready", function () {
            $(".chosen-select").on("change", function (evt, params) {
                angular.element('#appmodulecontroller').scope().appModulesController.GetData()
            });
        });
部分/模板:

<div class="appModuleboxes" ng-repeat="userAppModule in appModulesController.userAppModules">
    <div class="appModuleboxName">
    <a ui-sref="subhome({id:userAppModule.Id})">{{userAppModule.Name}}</a>
    </div>
    <div class="appModuleboxValue" id="ambv-{{userAppModule.Id}}">
    {{userAppModule.Value}}
    </div>

</div>
同样,要明确的是,当我更改下拉过滤器时,如何捕获该更改事件并告诉控制器重新运行/重新加载

谢谢你的帮助

=============编辑===========

我找到了让它工作的方法,但感觉不对。由于事件发生在Angular外部,因此我通过JQuery处理外部事件,然后调用Angular控制器:

.controller('AppModulesController', function (UserAppModulesService, $scope, $state) {
var appModulesController = this;

appModulesController.GetData = function () {

    var csCostCenter = $("#costcenter.chosen-select").val();
    var csProvName = $("#providername.chosen-select").val();
    var csProvSpec = $("#providerspecialty.chosen-select").val();
    var csProvStatus = $("#providerstatus.chosen-select").val();
    var csProvSpecType = $("#providerspecialtytype.chosen-select").val();


    // Create a WebRequestObj
    var wro = new WebRequestObj(
        "noname",
        "Cube_MS12",
        [], // the ASP.Net MVC controller selects the Measures, so those will not need to be set here
        [], // this request requires no dimensions
        [new filterObj("[MS Dim Service Date].[Dtof Svc Year Month]", ["CURRENT"])]
    );


    // get the current value of the Chosen Select Filters, and add the values to the WebRequestObj
    if (csCostCenter !== null) { wro.filters.push(new filterObj("[MS Dim Cost Center].[Cost Center Name]", csCostCenter)); }
    if (csProvName !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Name]", csProvName)); }
    if (csProvSpec !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Specialty]", csProvSpec)); }
    if (csProvStatus !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Status]", csProvStatus)); }
    if (csProvSpecType !== null) { wro.filters.push(new filterObj("[MS Dim Provider].[Provider Specialty Type]", csProvSpecType)); }


    //send request
    var json = JSON.stringify(wro);
    appModulesController.userAppModules = UserAppModulesService.query({ json: json });  //.$promise.then();
}


appModulesController.GetData();

});
$(document).on("ready", function () {
            $(".chosen-select").on("change", function (evt, params) {
                angular.element('#appmodulecontroller').scope().appModulesController.GetData()
            });
        });

我真的不喜欢这样,但我想我需要重新构造页面/代码,以实现更纯粹的角度

您可以在select上使用ng change调用控制器中的方法

这里有一个小例子

<select ng-change="TransactionCtrl.updateQtyInStock()"  ng-model="TransactionCtrl.currentTransaction.uom" repeat-on="TransactionCtrl.uomList" class="form-control input-lg" selectpicker="{ dropupAuto: false }" toggle-dropdown data-style="btn-white btn-lg">
    <option ng-repeat="uom in TransactionCtrl.uomList" ng-selected="uom.name == TransactionCtrl.currentTransaction.uom" value="{{uom.name}}">
         {{uom.name}}
    </option>
</select>

{{uom.name}

谢谢。是否存在范围问题,因为我要更新的控制器与创建下拉列表的控制器不同(目前我创建的下拉列表没有角度)。那么,当元素不是由TransactionCtrl创建时,我可以调用ng change=“TransactionCtrl.updateQtyInStock()”吗?有什么原因不能在控制器中创建下拉列表吗?您也可以使用$rootscope,这可能不是一个最佳实践,但它应该可以工作。您的输入让我思考,我找到了一种方法让它工作。我想我最终会把过滤器改成角度处理,或者把数字改成非角度处理。将此标记为答案。