Javascript AngularJS-返回未定义值的函数的NgOptions

Javascript AngularJS-返回未定义值的函数的NgOptions,javascript,angularjs,undefined,angularjs-ng-options,Javascript,Angularjs,Undefined,Angularjs Ng Options,我有一个应用程序,它必须根据前面的选项在select中显示一些选项。为了实现这一点,我将逻辑放在控制器函数中显示这些选项,如下所示: vm.getScopeValues = function(tp){ var vals = []; vals.push({n: 'Opt1', v: 'opt1'}); if(!tp || tp != 'somevalue'){ vals.push({n: 'Opt2', v: 'opt2'}); } r

我有一个应用程序,它必须根据前面的选项在
select
中显示一些选项。为了实现这一点,我将逻辑放在控制器函数中显示这些选项,如下所示:

vm.getScopeValues = function(tp){
    var vals = [];

    vals.push({n: 'Opt1', v: 'opt1'});

    if(!tp || tp != 'somevalue'){
        vals.push({n: 'Opt2', v: 'opt2'});
    }

    return vals;
};
问题是,有时,我会得到一个
未定义的
作为select选项的值。在以下JSFIDLE中,您可以看到一种更简单的方法,但结果相同:

如你所见:

  • 如果我按v写
    轨迹,我将得到未定义
  • 如果我通过o.v写入
    轨迹
    ,则值是正确的,但是
    ng模型
    没有正确匹配
  • 如果我以o.n.的形式写入
    o.v.
    ,而不使用
    跟踪方式
    ,我会得到一个错误($digest cycles)
  • 当所有内容都正确匹配时(我以某种方式实现了它,但不记得是如何实现的),如果我添加一个新的动态“字段”(单击“添加新字段”),那么它们将再次显示为
    未定义的
我制作了
console.log
来观察函数的返回值,它被正确调用并返回正确的值(没有未定义的

我需要能够在
字段
数组中创建普通的新条目(当然,带有
类型
的初始值),并且select为选项获取正确的值

更新 如您所见,使用这些值生成控制器变量(而不是函数)也不起作用,这会带来相同的问题:


谢谢大家!

这个方法不正确。每次调用时都会生成一个新数组,angular将无法找到其私有属性$$xx($$hashObject,我想)等。。因此,它认为必须在视图中更新对象。例如,您必须将结果放在scope.myoptionsvalues中,但根据字段的类型,我需要一组不同的选项。我无法获取
$scope
fields变量,因为这将更改每个字段上的每个实例,并将最后调用的实例作为正确的值。您可以将它们放在子对象中<代码>$scope.myoptions={}并为每个对象创建
$scope.myoptions[objectIndex]=[]并在其中添加选项。objectIndex可以是对象的类型名,也可以是任何您想要的,您需要存储它们,否则angularjs将无法知道选项是否已更新。好吧,我将尝试这种方法。但是,我想看看是否有其他人可以提供解决方案,而不必预先创建这些字段并将其值存储到数组中。谢谢大家!@Pierreemanuellallemant我试过你的方法,但我仍然遇到同样的问题。我得到了
未定义的
或得到了正确的值,但默认情况下选择了一个“?”选项(而不是
ng model
值)。还有其他想法吗?谢谢。这个方法不正确。每次调用时都会生成一个新数组,angular将无法找到其私有属性$$xx($$hashObject,我想)等。。因此,它认为必须在视图中更新对象。例如,您必须将结果放在scope.myoptionsvalues中,但根据字段的类型,我需要一组不同的选项。我无法获取
$scope
fields变量,因为这将更改每个字段上的每个实例,并将最后调用的实例作为正确的值。您可以将它们放在子对象中<代码>$scope.myoptions={}并为每个对象创建
$scope.myoptions[objectIndex]=[]并在其中添加选项。objectIndex可以是对象的类型名,也可以是任何您想要的,您需要存储它们,否则angularjs将无法知道选项是否已更新。好吧,我将尝试这种方法。但是,我想看看是否有其他人可以提供解决方案,而不必预先创建这些字段并将其值存储到数组中。谢谢大家!@Pierreemanuellallemant我试过你的方法,但我仍然遇到同样的问题。我得到了
未定义的
或得到了正确的值,但默认情况下选择了一个“?”选项(而不是
ng model
值)。还有其他想法吗?非常感谢。