Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/23.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 - Fatal编程技术网

Javascript 当值是对象数组时,ng选项为(键,值)对预选值

Javascript 当值是对象数组时,ng选项为(键,值)对预选值,javascript,angularjs,Javascript,Angularjs,当value是一个对象数组时,我不能在ng optionsfrom(key,value)对中进行预选,尽管如果使用value.property,我可以进行预选 我在JSFIDLE中编写了一个示例,我能够通过key或value.property预先选择ng选项,但在我的例子中,我需要整个数组 编辑 :我之所以编辑,是因为[key,value]是[key,Array[Object]],而不是[key,Object]。我添加了一个新的html选择代码来显示基于给定答案的正确选择 请注意,您必须将整个数

当value是一个对象数组时,我不能在ng optionsfrom(key,value)对中进行预选,尽管如果使用value.property,我可以进行预选

我在JSFIDLE中编写了一个示例,我能够通过key或value.property预先选择ng选项,但在我的例子中,我需要整个数组

编辑 :我之所以编辑,是因为[key,value]是[key,Array[Object]],而不是[key,Object]。我添加了一个新的html选择代码来显示基于给定答案的正确选择

请注意,您必须将整个数组传递到ng模型中,尽管跟踪只是检查数组零。两种结构应该相同

HTML

<div ng-app="myApp" ng-controller="demoCtrl">
    <select name="first" ng-model="data" ng-options="key as value.templateId for (key, value) in options">
        <option value="">Select template</option>
    </select>
    <div>Data is preselected! = {{data}}</div>
    <br>
    <select name="second" ng-model="data2" ng-options="value.templateId as key for (key, value) in options">
        <option value="">Select template</option>
    </select>
    <div>Data is preselected! = {{data2}}</div>
    <br>
    <select name="third" ng-model="data3" ng-options="value as key for (key, value) in options">
        <option value="">Select template</option>
    </select>
    <div>Data is NOT preselected! = {{data3}}</div> :(

    <select name="forth" ng-model="data4" ng-options="key for (key, value) in                                
    options track by value[0].templateId">

      <option value="">Select template</option>
   </select>

<div>Solution! = {{data4}}</div>

使用
ngOptions
时,您可以使用
track by
来确定正确绑定值的唯一标识符。此外,值不能是字符串,它必须是如下所示的对象:

$scope.data3 = { templateId :"001" , color : "yellow"};
以及您的模板:

<select name="third"
    ng-model="data3"
    ng-options="value as key for (key, value) in options track by value.templateId">
    <option value="">Select template</option>
</select>

选择模板
使用
track by value.templateId
将告诉
ngOptions
在测试对象的相等性并确定所选值时查看属性
value.templateId


更新了您的。

当使用
ngOptions
时,您可以使用
track by
来确定正确绑定值的唯一标识符。此外,值不能是字符串,它必须是如下所示的对象:

$scope.data3 = { templateId :"001" , color : "yellow"};
以及您的模板:

<select name="third"
    ng-model="data3"
    ng-options="value as key for (key, value) in options track by value.templateId">
    <option value="">Select template</option>
</select>

选择模板
使用
track by value.templateId
将告诉
ngOptions
在测试对象的相等性并确定所选值时查看属性
value.templateId


更新了您的。

为了达到此要求,您必须在ng选择中使用track by。track by将帮助您使用值标记绑定select选项。您还应该提供一个唯一的Id字段来跟踪select选项

<select ng-model="data" ng-options="item.color for item in options  track by item.templateId">
</select>
要初始化“选择”选项,可以通过以下方式设置模型:

$scope.data= $scope.options[0];

只有在使用“选择”选项中的“跟踪方式”属性时,才能初始化范围变量。在您的问题中,
templateId
是唯一的id

为了达到这一要求,您必须在ng select中使用track by。track by将帮助您使用值标记绑定select选项。您还应该提供一个唯一的Id字段来跟踪select选项

<select ng-model="data" ng-options="item.color for item in options  track by item.templateId">
</select>
要初始化“选择”选项,可以通过以下方式设置模型:

$scope.data= $scope.options[0];

只有在使用“选择”选项中的“跟踪方式”属性时,才能初始化范围变量。在您的问题中,
templateId
是唯一的id

谢谢@Nitheesh,我根据这个答案编写了解决方案谢谢@Nitheesh,我根据这个答案编写了解决方案谢谢@LenilsonDeCastro,我根据这个答案编写了解决方案,很高兴能提供帮助。如果答案正确的话,你也可以接受。对不起,我的答案迟了。我不确定我是否应该接受你的答案,即使它是真实的,并且正确的答案(添加到编辑的问题中)是基于它的。如果您看到我的解决方案跟踪是按数组的属性进行的,而不仅仅是属性,并且我提供了有关如何传递数组的准确信息。我希望你能理解。不管怎样,你还是认为我应该接受你的答案,我没有问题去做。好吧,如果这是一个可以接受的答案,你应该接受。但是如果不是,你可以接受其他人,或者自己提供一个正确的答案来回答这个问题,这样人们就可以在类似的问题上得到帮助。无论如何,这取决于你。谢谢@LenilsonDeCastro,我根据这个答案写了解决方案,很高兴我能帮上忙。如果答案正确的话,你也可以接受。对不起,我的答案迟了。我不确定我是否应该接受你的答案,即使它是真实的,并且正确的答案(添加到编辑的问题中)是基于它的。如果您看到我的解决方案跟踪是按数组的属性进行的,而不仅仅是属性,并且我提供了有关如何传递数组的准确信息。我希望你能理解。不管怎样,你还是认为我应该接受你的答案,我没有问题去做。好吧,如果这是一个可以接受的答案,你应该接受。但是如果不是,你可以接受其他人,或者自己提供一个正确的答案来回答这个问题,这样人们就可以在类似的问题上得到帮助。不管怎样,这取决于你。