加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 如何获取选择标签的ng模型以获得最初选择的选项?

发布时间:2020-12-17 17:38:23 所属栏目:安全 来源:网络整理
导读:我对Angular很新,所以我可能会对这一切都做错…… 我有一个 select类似如下: select ng-model="mySelectedValue" option value=""--/option option ng-repeat="myValue in someDynamicArrayOfValues" value="{{myValue}}" ng-selected="myFunctionForDeterm
我对Angular很新,所以我可能会对这一切都做错……

我有一个< select>类似如下:

<select ng-model="mySelectedValue">
    <option value="">--</option>
    <option ng-repeat="myValue in someDynamicArrayOfValues" value="{{myValue}}" ng-selected="myFunctionForDeterminingWhetherValueIsSelected(myValue)">{{myValue}}</option>
</select>

这大部分都有效…下拉列表最初会选择正确的选项,如果我更改了所选的选项,那么mySelectedValue将获得新的选择.但是,mySelectedValue不会获得最初选择的选项. mySelectedValue为空,直到我更改下拉列表中的值.

我查看了ng-init,但似乎在设置someDynamicArrayOfValues之前得到了评估…

有没有办法让mySelectedValue接收最初选择的<选项>?中的值?

更新:
我忘了提到我还尝试过使用ng-options,但是没有任何运气可以与确定选择了哪个选项一起工作.

我试过这个:

<div ng-show="someDynamicArrayOfValues">
    <select ng-model="mySelectedValue" ng-options="arrayValue for arrayValue in someDynamicArrayOfValues" ng-selected="myFunctionForDeterminingWhetherValueIsSelected(arrayValue)">
        <option value="">--</option>
    </select>
</div>

还有这个:

<div ng-show="someDynamicArrayOfValues">
    <select ng-model="mySelectedValue" ng-options="arrayValue for arrayValue in someDynamicArrayOfValues" ng-init="myFunctionForSettingSelectedValue()">
        <option value="">--</option>
    </select>
</div>

但是这些都不起作用,因为在设置someDynamicArrayOfValues之前构建了select(并且ng-init和ng-selected都被评估),因此,在< select>之前.甚至可见.当使用< option ng-repeat =“...”>时,< select>在设置someDynamicArrayOfValues之后才会构建/初始化,这就是我一直朝那个方向发展的原因.

有没有办法让ng-options技术起作用,同时让select依赖于someDynamicArrayOfValues(如果ng-options是更好的方法)?

更新2:
这是一个Plunker(从ababashka的答案修改),它更接近我最终想要实现的目标:http://plnkr.co/edit/Kj4xalhI28i5IU0hGBLL?p=preview.它还没有完全存在……我希望它能够让最近的3个下拉菜单中的每一个都设置下来一旦设置了someDynamicArrayOfValues,匹配动态值.

解决方法

我认为你将使用select标签的ng-options属性会很好.它是一个角度指令,可根据选项数组创建选项.你可以看看 select documentation

如果你使用你的代码 – 你的函数myFunctionForDeterminingWhetherValueIsSelected在初始化时为每个选项工作两次,在你选择另一个选项时为每个选项项工作一次.

使用您的代码演示:http://plnkr.co/edit/0IVNLHiw3jpz4zMKcB0P?p=preview

您可以在select指令的描述中看到select的演示.

更新

首先,要查看值何时更改 – 您需要使用select标记的ng-change属性,如下所示:

<select ng-model="mySelectedValue" 
  ng-options="myValue for myValue in someDynamicArrayOfValues"
  ng-change="myFunctionForDeterminingWhetherValueIsSelected()">
  <option value="">--</option>
</select>

然后,我不知道myFunctionForSettingSelectedValue是怎样的,但有2个变种:

>此函数返回一些值 – 然后您需要使用ng-init下一个方法.

控制器:

$scope.someInitFunc = function () {
    return 'One';
  };

HTML:

<select ng-model="mySelectedValue" 
      ng-options="myValue for myValue in someDynamicArrayOfValues"
      ng-change="myFunctionForDeterminingWhetherValueIsSelected()"
      ng-init="mySelectedValue = someInitFunc()">
      <option value="">--</option>
</select>

>在此函数中设置mySelectedValue的值 – 然后执行此操作.

控制器:

$scope.someInitFunc = function () {
  $scope.mySelectedValue = 'One';
};

HTML:

<select ng-model="mySelectedValue" 
  ng-options="myValue for myValue in someDynamicArrayOfValues"
  ng-change="myFunctionForDeterminingWhetherValueIsSelected()"
  ng-init="someInitFunc()">
  <option value="">--</option>
</select>

我创建了一个实现使用ng-init的第一个版本的示例.选择新值时 – 将其打印到控制台.

此外,我将选项移动到options.json文件.所以选项在ajax请求完成后初始化.一切都很好.

演示:http://plnkr.co/edit/pzjxxTnboKJXJYBGcgNb?p=preview

更新2

再次问好.我认为您不需要根据您的要求提供任何ng-init.您可以在http请求完成时启动模型的值.另外我不明白为什么在这种情况下你需要ng-change功能.

以下是您需要修改的代码,其中加载选项后启动ng-models的值.

JavaScript的:

.controller('MainCtrl',function($scope,$http) {
  $scope.someStaticArrayOfValues = ['One','Two','Three'];
  $scope.mySelectedValues = {};
  $http.get('options.json').then(
    function (response) {
      $scope.someDynamicArrayOfValues = response.data;
      for (var i = 0; i < $scope.someStaticArrayOfValues.length; ++i) {
        $scope.someDynamicArrayOfValues.some(function (value) {
          if (value.substring(0,$scope.someStaticArrayOfValues[i].length) === $scope.someStaticArrayOfValues[i]) {
            $scope.mySelectedValues[$scope.someStaticArrayOfValues[i]] = value;
            return true;
          }
        });
      }
    },function (response) {
      console.log('ERROR!');
    }
  );
});

HTML:

<body ng-controller="MainCtrl">
    <p>Hello {{name}}!</p>

    <div ng-show="someDynamicArrayOfValues">
      <ul>
        <li ng-repeat="staticValue in someStaticArrayOfValues">
          {{staticValue}} - 
          <select ng-model="mySelectedValues[staticValue]" 
            ng-options="myValue for myValue in someDynamicArrayOfValues">
            <option value="">--</option>
          </select>
          <h2>{{mySelectedValues[staticValue]}}</h2>
        </li>
      </ul>
    </div>
  </body>

演示:http://plnkr.co/edit/9Q1MH0esGE1SIJa0m2NV?p=preview

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读