Javascript 角度N选项前置字符串:到值

Javascript 角度N选项前置字符串:到值,javascript,angularjs,Javascript,Angularjs,我正在尝试为Angular构建一个指令,该指令放置一个标签并选择所有必需的类。我的指令代码如下所示: return { restrict: 'E', scope: { text: '=', model: '=', options: '=' }, template: "<div class='form-group'><label class=

我正在尝试为Angular构建一个指令,该指令放置一个标签并选择所有必需的类。我的指令代码如下所示:

  return {
        restrict: 'E',
        scope: {
            text: '=',
            model: '=',
            options: '='
        },
        template: "<div class='form-group'><label class='control-label'>{{text}}</label><select class='form-control' ng-model='model' ng-options='option.env as option.name for option in options'></select></div>"
但是,当Angular将指令转换为HTML时,会导致

    <select class="form-control ng-pristine ng-untouched ng-valid" ng-model="model" ng-options="option.env as option.name for option in options"><option label="PROD" value="string:prod">PROD</option>
<option label="N" value="string:n0">N</option>
<option label="N1" value="string:n1">N1</option>
<option label="N0" value="string:n2" selected="selected">N0</option>
</select>
PROD
N
N1
N0

我不明白为什么字符串:value属性中有。

您真的不需要担心
值是什么,因为它是在内部使用的

请记住,
ng选项
可以配置为向模型传递不同类型的值。。。字符串、对象、数组、数字等

因此,检查您拥有的值很明显,您为其配置的
typeof
值将是字符串,并且如果选中,模型将被分配
“prod”

要记住的另一件事是反向绑定,当angular在渲染期间必须在“选择”上设置现有模型值时,您不会看到这种反向绑定


老实说,我从来没有见过你指出的这个价值协议。当您被错误的
ng选项
语法绊倒时,它看起来有助于调试。我猜这是最近版本的angular中增加的一项功能。。。但我可能错了,这只是因为我已经有一段时间没有在选项标记级别深入研究dom了

根据charliefl的回答,我将选项的来源更改为一个对象

  $scope.environments = {
        prod: 'PROD',
        n0: 'N',
        n1: 'N1',
        n2: 'N2'
    };

并将ng options子句修改为
键作为选项中(键,值)的值。根据文档,这是一个select子句,select和options的值将是属性名称,在本例中为prod、n0等,它们对应于模型的环境值。

使用按“属性”跟踪

像这样:

<select ..... ng-options="option.env as option.name for option in options track by option.env"

  $scope.environments = {
        prod: 'PROD',
        n0: 'N',
        n1: 'N1',
        n2: 'N2'
    };
<select ..... ng-options="option.env as option.name for option in options track by option.env"