【问题标题】:Get selected option from select with angular JS and ionic使用角度 JS 和离子从选择中获取选定的选项
【发布时间】:2015-12-05 22:47:31
【问题描述】:

我对 Angular Js 上的 select 有一些问题,我搜索了很多并找到了一些解决方案,但没有奏效。

我有一个类似于从我的 service.php

生成的 Json Structured
[
    {
        "Name": "Name1",
        "Variante": [
            {
                "Prix": "79.00",
                "Name": "20 Piéces"
            }
        ],
        "Description": "",
        "main_image": "images/products/DSC_0192.jpg"
    },
    {
        "Name": "NAME2",
        "Variante": [
            {
                "Prix": "39.00",
                "Name": "250g"
            },
            {
                "Prix": "60.00",
                "Name": "500g"
            }
        ],
    "Description": "",
    "main_image": "images/products/DSC_0125.jpg"
    }
]

这是我的 controller.js

.controller('productsCtrl', function($scope, $http, $stateParams) {
    $http.get('service.php')
    .success(function (response) {
        $scope.products = response;
    });
});

这是我的 products.html

<ion-view view-title="Products">
    <ion-content>
        <ion-list>
            <ion-item style="background-image: url({{product.main_image}})" 
            ng-repeat="product in products" class="productListItem">
                <h2 class="h2Name">{{product.Name}}</h2>

                <button class="button button-balanced button-right">
                    <i class="icon ion-ios-cart"></i>
                </button>

                <select class="Variantes" 
                    ng-if="product.Variante.length > 1" 
                    ng-model="selectedItem"
                    ng-options="variant.Name for variant in product.Variante">
                </select>

                <h2 class="Variantes" ng-if="product.Variante.length == 1">
                    {{product.Variante[0].Name}}
                </h2>
                <h2 class="h2Price" ng-if="product.Variante.length > 1">
                    {{selectedItem.Prix}}
                </h2>
                <h2 class="h2Price" ng-if="product.Variante.length == 1">
                    {{product.Variante[0].Prix}}
                </h2>

            </ion-item>
        </ion-list>
    </ion-content>
</ion-view>

如果我有多个Variante我希望能够在更改选择框时更改价格(Prix)值。但它不起作用。

需要任何帮助!

谢谢

【问题讨论】:

    标签: javascript php json angularjs ionic-framework


    【解决方案1】:

    您遇到的问题是由于 ng-if。它创建了一个单独的范围,使用 ng-show 代替,因为它使用相同的范围,您的代码应该可以完美运行。

    【讨论】:

    • 非常感谢,它可以工作,但如何隐藏选择框中的空白选项?我试过这个` $scope.selectedItem= $scope.product.Variante[0].Name; ` 在控制器上,没有结果。
    • 在 select 上使用 ng-init,如下所示:
    • 您需要使用 json 对象而不是 json 的属性来初始化 selectedItem,因为所选项目将是整个产品 json,而不仅仅是作为选项显示的字符串。
    • 感谢@Diana,它工作正常。但我没有收到你的第二条评论
    • 我在解释为​​什么 ng-init 应该使用 product.Variante[0] 而不是 product.Variante[0].Name 你试图在控制器中使用。
    【解决方案2】:

    使用ng-show 会起作用,但如果您要为ng-model 处理dot rule,也可以使用ng-if

    如果您将selectedItem 添加到product 对象,您的ng-if 标记将按预期工作。您选择的ng-model 类似于ng-model="product.selectedItem"

    请看下面的演示或jsfiddle

    var jsonData = [
        {
            "Name": "Name1",
            "Variante": [
                {
                    "Prix": "79.00",
                    "Name": "20 Piéces"
                }
            ],
            "Description": "",
            "main_image": "images/products/DSC_0192.jpg"
        },
        {
            "Name": "NAME2",
            "Variante": [
                {
                    "Prix": "39.00",
                    "Name": "250g"
                },
                {
                    "Prix": "60.00",
                    "Name": "500g"
                }
            ],
        "Description": "",
        "main_image": "images/products/DSC_0125.jpg"
        }
    ];
    
    angular.module('demoApp', ['ionic'])
    .controller('productsCtrl', function($scope, $http, $stateParams) {
        $scope.product = {
            selectedItem: {}
        };
        //$http.get('service.php')
        //.success(function (response) {
          //http just removed for the demo
            $scope.products = jsonData;//response;
        //});
    });
    <script src="http://code.ionicframework.com/1.1.0/js/ionic.bundle.js"></script>
    <link href="http://code.ionicframework.com/1.1.0/css/ionic.css" rel="stylesheet"/>
    <ion-view ng-app="demoApp" ng-controller="productsCtrl" view-title="Products">
        <ion-content>
            <ion-list>
                <ion-item style="background-image: url({{product.main_image}})" 
                ng-repeat="product in products" class="productListItem" ng-init="product.selectedItem = product.Variante[0]">
                    <h2 class="h2Name">{{product.Name}}</h2>
    
                    <button class="button button-balanced button-right">
                        <i class="icon ion-ios-cart"></i>
                    </button>
    
                    <select class="Variantes" 
                        ng-if="product.Variante.length > 1" 
                        ng-model="product.selectedItem"
                        ng-options="variant.Name for variant in product.Variante">
                    </select>
                    <h2 class="Variantes" ng-if="product.Variante.length == 1">
                        {{product.Variante[0].Name}}
                    </h2>
                    <h2 class="h2Price" ng-if="product.Variante.length > 1">
                        {{product.selectedItem.Prix | currency}}
                    </h2>
                    <h2 class="h2Price" ng-if="product.Variante.length == 1">
                        {{product.Variante[0].Prix | currency}}
                    </h2>
                </ion-item>
            </ion-list>
        </ion-content>
    </ion-view>

    【讨论】:

    • 谢谢,它工作正常。你能解释一下 ng-if 和 ng-show 有什么区别吗?
    • ng-if 如果表达式是假的,则从 DOM 中删除 html 元素,ng-show 仅隐藏内容,但将标记保留在 DOM 中。根据经验,如果它仅在页面加载时更改,请使用ng-if,当用户更频繁地更改它时使用ng-show。所以 ng-show 会更适合您的价格信息。也看看这个SO question
    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    • 2017-01-23
    • 2012-10-19
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    相关资源
    最近更新 更多