【问题标题】:Angular JS - get selected text as ng model (without ng-options)Angular JS - 将选定的文本作为 ng 模型(没有 ng-options)
【发布时间】:2016-02-24 01:51:46
【问题描述】:

在我后面的代码中,我填写了一个 DropDownList 如下(使用 VB)

ddlCountries.DataSource = dt ' dt is DataTable with columns "CountryCode" and "CountryName"
ddlCountries.DataTextField = "CountryName"
ddlCountries.DataValueField = "CountryCode"
ddlCountries.DataBind()
ddlCountries.Attributes.Add("ng-model", "CountryName")

然后是客户端,我有一个选择标签,里面填满了来自服务器端的选项,如下所示:

<select ng-model="CountryName">
    <option value="IN">India</option>
    <option value="US">United States</option>
    <option value="ML">Malaysia</option>
    <!-- and other 200+ records -->
</select>

我不能在这里使用ng-options!现在,每当我从select 更改值时,我都会得到CountryNameINUSML 等。此外,我无法编辑选项的值,因为它们用于服务器端代码。

在这里,我希望 CountryName 改为 IndiaUnited StatesMalaysia!我能做什么?

【问题讨论】:

  • &lt;option value="India"&gt;India&lt;/option&gt; &lt;option value="United States"&gt;United States&lt;/option&gt;
  • 不能那样做...@KalhanoToressPamuditha
  • 没有一种干净的方式来做你想做的事。最好让服务器根据需要发送值。
  • 为什么不能使用ng-options(从服务器获取国家列表并绑定)?
  • @RuchirGupta 这可能是因为您没有按照需要的方式使用它,或者您的数据结构不是您认为的那样。除非您向我们展示您是如何使用它的,否则我们很难猜出问题所在。

标签: javascript angularjs angular-ngmodel angularjs-ng-options angularjs-ng-model


【解决方案1】:

服务器向您发送什么数据?

是这样的对象数组吗?

var countries = [ 
    { name: 'India', code: 'IN'},
    { name: 'United States', code: 'US'},
    { name: 'Malaysia', code: 'ML'}
];

如果是,那么您可以轻松使用 ng-options(即使您不必这样做,它也更好)。

<select ng-model="CountryName"
    ng-options="c.code as c.name for c in countries">
</select>

或者,如果您实际上正在使用服务器端生成的 html 页面并且没有 javascript 对象,那么它有点棘手: (假设你可以使用 JQuery):

查看:

<select id="countryNameSelect" ng-change="setCountryName()">
    <option value="IN">India</option>
    <option value="US">United States</option>
    <option value="ML">Malaysia</option>
    <!-- and other 200+ records -->
</select>

控制器:

$scope.countryName = '';
$scope.setCountryName = function() {
  $scope.countryName = $("#countryNameSelect option:selected").html();
};

【讨论】:

  • @PSL:嗯,它只是读取值,而不是操纵 :) 但是是的,你是对的,这在概念上不是一个很好的解决方案。
  • 不只是操纵,控制器不应该知道或访问 DOM。控制器不是为了那个。这就是为什么你有指令的链接/编译功能。这就是它的设计方式,恕我直言,这是一种糟糕的做法(我相信大多数人都会同意我的观点)
  • @JoeSamanek 为我工作!!等我有更好的解决方案!
  • @PSL:是的,但问题是如果我们没有 html 以外的数据,我们需要访问它以获得所需的值。它不必在控制器中,但它必须在某个地方。
  • 通过 AngularJS 访问的方式很多,DOM 操作不值得
【解决方案2】:

在 PHP BackEnd 数组中到 Json Out:

// Init Load
$(function () {
    'use strict';
    angular
        .module('ngjsapp', [])
        .controller('FormCtrl', ['$scope', function ($scope) {

            var myArraySelect = <?php echo json_encode($arrayDemo); ?>

            $scope.changeSenasaProvinciasId = function (id) {
                console.log(myArraySelect[id]);
            }

        }]);
});

仅 HTML Stact + jQuery

// Option 1
$(function () {
    'use strict';
    angular
        .module('ngjsapp', [])
        .controller('FormCtrl', ['$scope', function ($scope) {

            $scope.changeSenasaProvinciasId = function () {
                console.log($("#mySelectID option:selected").text());
            }

        }]);
});

仅 HTML Stact + jQuery BEST

// Option 2
$(function () {
    'use strict';
    angular
        .module('ngjsapp', [])
        .controller('FormCtrl', ['$scope', function ($scope) {

            var myArraySelect = $('#mySelectID option').each( function() { 
                    myArraySelect.push({$(this).val() : $(this).text() });
                });

            $scope.changeSenasaProvinciasId = function (id) {
                console.log(myArraySelect[id]);
            }

        }]);
});

【讨论】:

  • 他们还可以看到这里实现的其他解决方案。 AngularJS 100% 纯,没有任何 Jquery,因为人们推荐 AngularJS 作为良好实践,避免使用 jquery。 stackoverflow.com/questions/35604956/…
猜你喜欢
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多