Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.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
Javascript 如何以编程方式选择ng选项值?_Javascript_Angularjs_Angularjs Ng Options - Fatal编程技术网

Javascript 如何以编程方式选择ng选项值?

Javascript 如何以编程方式选择ng选项值?,javascript,angularjs,angularjs-ng-options,Javascript,Angularjs,Angularjs Ng Options,我有一个充满下拉列表的视图来过滤报告。我还有一个显示为链接的已保存过滤器的视图。当用户单击他们保存的过滤器时,我希望选择DropDownList的适当值。下拉列表已正确填充。在保存的筛选器链接上有一个ng单击,它将调用一个函数,该函数迭代保存的筛选器值集合并自动选择正确的值。我不知道如何以编程方式设置所选选项。非常感谢您的帮助 <select uid="locSelect" class="span12" ng-model="reportDetail.se

我有一个充满下拉列表的视图来过滤报告。我还有一个显示为链接的已保存过滤器的视图。当用户单击他们保存的过滤器时,我希望选择DropDownList的适当值。下拉列表已正确填充。在保存的筛选器链接上有一个
ng单击
,它将调用一个函数,该函数迭代保存的筛选器值集合并自动选择正确的值。我不知道如何以编程方式设置所选选项。非常感谢您的帮助

<select uid="locSelect" 
        class="span12" 
        ng-model="reportDetail.selectedLoc" 
        ng-options="loc.dbid as loc.serviceName for loc in reportDetail.locList | orderBy:'name'">
    <option uid="unselectedLocOption" value="">-- Select One --</option>
</select>

--选择一个--
以下是已保存过滤器的列表:

<div class=" well fixed-search" style="overflow-x: hidden;overflow-y: auto;">
<div class="well-header">
    Saved Filters
</div>
<div ng-if="!hasSavedFilters">
    <span>No saved filters</span>
</div>
<ul ng-if="hasSavedFilters" class="nav nav-list dashboard-list">
    <li ng-repeat="filter in reportDetail.savedFilters">
        <a uid="savedFilter" href="" ng-click="reportDetail.loadSavedFilters(filter.filters)">
            <span ng-bind="filter.title"></span>
        </a>
    </li>
</ul>

保存的过滤器
没有保存的筛选器

这是我的控制器

(function(){
'use strict';

var ReportDetailController = function(ReportsService, $scope){
    var _locList = {};
    var _hospitalStatusList = {};
    var _providerStatusList = {};
    var _savedFilters = [];
    var _sourceTypeList = {};
    var _dateRangeList = {};

    var _init = function(){
        ReportsService.getCurrentReportSavedFilters().then(function(data){
            $scope.reportDetail.savedFilters =data;
            $scope.hasSavedFilters = ReportsService.hasSavedFilters();
        });

        ReportsService.getLOCListForDDL().then(function(data){
            $scope.reportDetail.locList = data;
            //$scope.reportDetail.selectedLoc = $scope.reportDetail.locList[0];
        });

        ReportsService.getSelectListData()
            .then(function(data){
                $scope.reportDetail.sourceTypeList = data.CONNECTION_TARGET_STATUS;
                $scope.reportDetail.hospitalStatusList = data.CONNECTION_SOURCE_STATUS;
            });
        ReportsService.getDateRangesForDDL()
            .then(function(data){
                $scope.reportDetail.dateRangeList = data;
            });

        $scope.reportDetail.providerStatusList = ReportsService.getProviderStatusForDDL();


    };



    var _loadSavedFilters = function(filters){
        for(var i = 0, l = $scope.reportDetail.locList.length; i<l; i++){
            if($scope.reportDetail.locList[i].serviceName == filters.levelOfCare){
                 $scope.reportDetail.selectedLoc = $scope.reportDetail.locList[i];
                console.log($scope.reportDetail.selectedLoc);
            }
        }
    }

    var _isActive = function(filter){
        for(var i = 0, l = $scope.reportDetail.savedFilters.length; i<l; i++){
            if(filter.title == $scope.reportDetail.savedFilters[i].title){
                return true;
            }
            return false;
        }
    }

    var _generateReport = function(){
        return ReportsService.generateReport();
    };

    $scope.reportDetail = {
        init: _init,
        selectedLoc: null,
        isActive: _isActive,
        locList: _locList,
        selectedHospitalStatus: 'NOTIFIED',
        hospitalStatusList: _hospitalStatusList,
        selectedProviderStatus: 'NEW',
        providerStatusList: _providerStatusList,
        selectedSourceType: 'CONNECTED',
        sourceTypeList: _sourceTypeList,
        selectedDateRange: '',
        dateRangeList: _dateRangeList,
        savedFilters: _savedFilters,
        loadSavedFilters: _loadSavedFilters,
        generateReport: _generateReport
    };

    $scope.reportDetail.init();
};

app.controller('ReportDetailController', ['ReportsService', '$scope',  ReportDetailController]);
})();
(函数(){
"严格使用",;
var ReportDetailController=函数(ReportsService$scope){
var_locList={};
var_hospitalStatusList={};
var_providerStatusList={};
var_savedFilters=[];
var_sourceTypeList={};
var_dateRangeList={};
var_init=函数(){
ReportsService.getCurrentReportSavedFilters()。然后(函数(数据){
$scope.reportDetail.savedFilters=数据;
$scope.hasSavedFilters=ReportsService.hasSavedFilters();
});
ReportsService.getLOCListForDDL().then(函数(数据){
$scope.reportDetail.locList=数据;
//$scope.reportDetail.selectedLoc=$scope.reportDetail.locList[0];
});
ReportsService.getSelectListData()
.then(功能(数据){
$scope.reportDetail.sourceTypeList=data.CONNECTION\u TARGET\u STATUS;
$scope.reportDetail.hospitalStatusList=data.CONNECTION\u SOURCE\u STATUS;
});
ReportsService.getDateRangesForDDL()
.then(功能(数据){
$scope.reportDetail.dateRangeList=数据;
});
$scope.reportDetail.providerStatusList=ReportsService.getProviderStatusForDDL();
};
var\u loadSavedFilters=函数(过滤器){

对于(var i=0,l=$scope.reportDetail.locList.length;i您只需将
ng model
设置为它应该是什么,因此在本例中,您可以将
reportDetail.selectedLoc
设置为它应该是什么

例如:

注意:确保它们具有相同的类型,因此在您的示例中,确保它们都是整数或字符串,如果一个为
5073
,另一个为
“5073”


我更新了小提琴,以显示字符串和数字的作用不同。

您需要自定义指令或类似的指令


方法1
{{val.name}}

方法1 {{val.name}} 来源(注意范围变更) {{dbs}}

您还可以使用
ng change
执行一些复杂的操作ng模型和表达式馈送ng选项-必须-匹配,以便Angular比较值并查看“选择”了哪个选项。正如“dave”所示。

由于时间限制,我最终选择了不同的路线。我在服务中创建了一个事件总线在我的控制器中分层并订阅偶数,更新模型,并在选择ng的情况下使用ng repeat


我仍然有兴趣了解为什么这不适用于ng选项。型号和ng选项类型匹配,并且所有内容似乎都已正确连接。当我有更多时间时,我将重新解决原始问题。感谢所有回复者!

如果我理解,总之,您有一个选择,其中包含一个列表,并且您希望以编程方式设置要选择的选项之一,将其键入为默认值,对吗

如果是这样,您可以使用ng选项轻松解决此问题,只需将控制器实例与范围相关联,并将列表的位置指定给select的模型,例如:

选择HTML

<select ng-model="vm.aluno_id" name="aluno_id" ng-options="aluno.nome for aluno in alunos">

我希望我已经帮助了

hmm…我想这就是我正在做的。我已经将ng模型设置为reportDetail.selectedLoc。单击链接时,LoadSavedFilter会启动并将reportDetail.selectedLoc设置为新值…但它不会改变。我几乎肯定我知道问题所在,因为我曾经花了几个小时调试它。确保它们是ei对于两个整数或两个字符串,如果一个为
5073
,另一个为
“5073”,则不知道它们是相同的
也不是这样。两者都是整数。还有一件事需要检查。如果您在复杂表单上有一个长时间运行的init序列,并且希望设置一些选择框默认值,那么您可能需要在实现的isReady标志上设置$watch,然后调用$timeout(function(){$scope.$apply(function(){viewmodel.value=desiredValue;})},0)因为您可能在Angular的摘要循环未拾取的时间更改viewmodel值。两者匹配…仍然没有运气。哦-当我写“必须匹配”时我的意思是ng模型和选项都需要从同一个数组/objs馈送-不是ng模型数组中的某个项的值与选项数组中的值匹配-它们不会按值进行比较。堆栈溢出。请编辑您的帖子或评论以符合此规则,或者将其删除。您可以在这些特定于语言的Stac中重新发布它允许非英语的k溢出社区:,。您可能希望在删除它之前对其进行翻译(StackOverflow=English)。
<select ng-model="vm.aluno_id" name="aluno_id" ng-options="aluno.nome for aluno in alunos">
app.controller("auxiliarController", function( $scope){

     //instancia controller;(Controller instance;)
     var vm = this;
     $scope.vm = vm;

     //carregando lista no scope, que será utilizado pelo angular no select
    //Loading list in scope, which will be used by angular in select
     $scope.alunos = [{id: 1, nome: "aa"}, {id: 2, nome: "bb"}];

     //setando item default no select
     $scope.vm.aluno_id = $scope.alunos[0];

});