在Angular中,对于选定的选项设置其他选项的默认值

8 浏览
0 Comments

在Angular中,对于选定的选项设置其他选项的默认值

问题:

如何将选定的大小作为索引来映射和显示相应的价格和tsin等于大小的索引

注意:

我正在试图在大小、价格和tsin之间建立关系

"Black": {

"sizes": "X Small, Small",

"prices": '$22.24, $24.94',

"tsin": "111002, 111003"

},

例如,如果选择了黑色,并且选择的大小是索引[0](或-X Small),则在ng-change上价格会更新为$22.24,tsin为111002

更新:

我更新了fiddle以更接近目标效果,但原型继承还没有。我只是想说明期望的效果。

我有一个简单的控制器,从$http获取一些虚假数据:

var app = angular.module("app", []);

app.controller('Ctrl', function ($scope, $filter, $http) {

//最低价格来自生产环境上的初始api请求

var lowestPrice = '$21.24';

//将currentPrice暴露给视图

$scope.currentPrice = lowestPrice;

//将当前价格更改为所选产品的价格的函数

$scope.getCurrentPrice = function(idx) {

$scope.currentPrice = idx;

}

//模拟一个json对象响应的一部分的虚假数据。

$scope.productData = {

"colors_and_sizes": {

"data": {

"Black": {

"prices": '$21.24, $29.94',

"swatch_image": 'http://lorempixel.com/50/50',

"sizes": "X Small, Small",

"prices": '$22.24, $24.94',

"tsin": "111002, 111003"

},

"Blue": {

"swatch_image": 'http://lorempixel.com/50/51',

"sizes": "X Small, Small",

"prices": '$22.24, $24.94',

"tsin": "112005, 112007"

}

}

}

};

});

注意:

我知道,数据对于我要做的事情来说很糟糕。

大小、价格和tsin是字符串。然而,当我到达视图时,我将它们分割:

ng-repeat="(key, val) in productData.colors_and_sizes.data track by $index">

type="radio"

name="colors"

hidden="true"

ng-model="item.myColor"

ng-value="key" />

ng-click="item.myColor = key"

ng-src="{{val.swatch_image}}"

alt="">

{{key}}

最后,我希望在视图上显示4个值:

mySize: {{ item.mySize}}

myColor: {{item.myColor}}

myPrice: {{item.currentPrice}}

myTsin: {{item.myTsin}}

再次请查看我的(旧的FIDDLE更新如上)JSfiddle。

0
0 Comments

问题出现的原因是在Angular中,当选中一个选项时,无法设置其他选项的默认值。解决方法是在控制器中声明一个函数,该函数接收item参数并计算其他属性的值。在HTML中,通过ng-click和ng-change指令调用该函数来更新其他选项的值。


$scope.fillItem = function(item) {
    var color = $scope.productData.colors_and_sizes.data[item.myColor];
    if(!color) return;
    var size = item.mySize,
    index = -1, i = 0,
    sizes = color.sizes.split(","),
    prices = color.prices.split(","),
    tsin = color.tsin.split(",");
    while(index == -1 && i < sizes.length) {
        if(sizes[i] == size) index = i;
        i++;
    }
    if(index >= 0) {
        item.currentPrice = prices[i];
        item.myTsin = tsin[i];
    }
}

以上是问题的原因和解决方法。但是根据提供的代码和描述,问题似乎还没有得到解决。在更新颜色时,价格和tsin的值没有正确更新。

0
0 Comments

在Angular中,当选择一个选项时,如何为其他选项设置默认值?

问题的出现原因:

在给定的代码中,当选择一个尺寸(size)选项时,会根据选择的尺寸更新价格(price)和产品编号(tsin)。然而,当改变颜色(color)选项时,并不会更新尺寸选项的默认值。问题是如何在改变颜色选项时,更新尺寸选项的默认值。

解决方法:

为了解决这个问题,我们可以在颜色选项的ng-change事件中添加一个函数,该函数将会重置尺寸选项的默认值为"Please select a size"。

修改后的代码如下:



在Angular控制器中,添加一个resetSizeSelection()函数来重置尺寸选项的默认值为"Please select a size":

$scope.resetSizeSelection = function() {
    $scope.item.mySize = "";
};

这样,当改变颜色选项时,尺寸选项的默认值会被重置为"Please select a size"。

通过以上的修改,问题得到了解决。现在,当改变颜色选项时,尺寸选项的默认值会被正确地更新为"Please select a size"。

0