使用angular JS和ionic从select中获取选中的选项


Get selected option from select with angular JS and ionic

我有一些问题与select在角Js,我搜索了很多,找到了一些解决方案,但不工作。

我有一个Json结构化像从我的服务。php

[
    {
        "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)值。但是它不工作。

需要任何帮助!!

谢谢

您的问题是由于ng-if。它创建一个单独的作用域,使用ng-show代替,因为它使用相同的作用域,你的代码应该可以完美地工作。

使用ng-show将工作,但你也可以使用ng-if,如果你照顾ng-modeldot rule

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

请看看下面的演示或在这个文件。

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>