在带有 ng-repeat 的 md-select 中使用带有 ng-model 的范围来保存和显示 JSON 元素
Using scope with ng-model in md-select with ng-repeat to save and display a JSON element
我在为 phonegap 开发的应用程序中遇到了两个错误,我希望你们中的一位可以帮助我。我正在构建一个包含 3 个不同部分的外卖应用程序:菜单、选项和订单。在“选项”页面中,我有多个复选框和一个使用 md-select 的下拉菜单。我想要做的是,当用户 select 从下拉列表中选择一个选项时,该选项将显示在订单页面中。我得到了它的工作,但是,我得到了一个额外的 "undefined" 文本,我不需要并且想要摆脱它。
这是我为此使用的相关脚本(plunker index.html 中的第 278-281 行):
$scope.selecteds = {};
angular.forEach($scope.items, function(value) {
$scope.selecteds = value;
});
现在,$scope.items 已作为项目数组预加载。
$scope.items = {
"results": [{
"active": false,
"createdAt": "2015-10-05T20:19:58.264Z",
"desc": "With arugula, smoked almonds \u0026 chipotle vinaigrette",
"img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Watermelon-Quinoa-Jimaca-Salad.jpg",
"name": "Watermelon Quinoa Jicama Salad (\u003cspan style=\"color: lightblue;\"\u003eVE\u003c/span\u003e, \u003cspan style=\"color: goldenrod;\"\u003eGF\u003c/span\u003e, \u003cspan style=\"color: yellow;\"\u003eDF\u003c/span\u003e)",
"objectId": "x1zpkWmvmP",
"price": 14,
"flavors": [{
"active": false,
"name": "Vanilla",
"price": 8
}, {
"active": false,
"name": "Almond",
"price": 8
}, {
"active": false,
"name": "Hazelnut",
"price": 8
}, {
"active": false,
"name": "Caramel",
"price": 8
}],
"sizes": [{
"active": false,
"name": "Small",
"price": 0
}, {
"active": false,
"name": "Medium",
"price": 5
}, {
"active": false,
"name": "Large",
"price": 10
}],
"sides": [{
"active": false,
"name": "Soup"
}, {
"active": false,
"name": "Salad"
}, {
"active": false,
"name": "Fries"
}],
"updatedAt": "2015-10-09T17:20:50.527Z"
}, {
"active": false,
"createdAt": "2015-10-05T20:35:01.363Z",
"desc": "Buffalo mozzarella, tomato, marinated artichoke hearts, black olives, pesto \u0026 balsamic drizzle",
"img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Mediterranean-Salad.jpg",
"name": "Mediterranean Salad (\u003cspan style=\"color: lightgreen;\"\u003eV\u003c/span\u003e, \u003cspan style=\"color: goldenrod;\"\u003eGF\u003c/span\u003e)",
"objectId": "nI5VSpdBUn",
"price": 15,
"flavors": [{
"active": false,
"name": "Chocolate",
"price": 8
}, {
"active": false,
"name": "Strawberry",
"price": 8
}, {
"active": false,
"name": "Mint",
"price": 8
}, {
"active": false,
"name": "Cherry",
"price": 8
}],
"sizes": [{
"active": false,
"name": "Small",
"price": 5
}, {
"active": false,
"name": "Medium",
"price": 10
}, {
"active": false,
"name": "Large",
"price": 15
}],
"sides": [{
"active": false,
"name": "Soup"
}, {
"active": false,
"name": "Salad"
}, {
"active": false,
"name": "Fries"
}],
"updatedAt": "2015-10-09T17:20:30.545Z"
}]
};
我在选项页面中的相关HTML如下:
<md-list>
<h2 class="md-title" style="color:#3F51B5;">Select Your Side</h2>
<md-divider></md-divider>
<md-list-item layout="row">
<md-select aria-label="side set" class="md-accent" placeholder="Select a Side" ng-model="selecteds[name]">
<md-option ng-value="item.name" ng-repeat="item in item.sides">{{ item.name }}</md-option>
</md-select>
</md-list-item>
</md-list>
我的HTML在订单页面如下:
<md-list-item layout="row">
<span>Side: {{selecteds}}</span>
</md-list-item>
这里有一个 plunker 可以理解这一切。不过请注意,我的JS都混在了index.html(提前致歉)
http://plnkr.co/edit/4ByCDzXZfRU7kMX9oURT?p=preview
如您所见,当您按下紫色按钮选择一个项目并将 select 'Soup' 作为边时,它显示为边:{"undefined":"Soup"} 在订单页面,我只需要显示 Side: Soup。
另一个主要问题是当 2 个盘子 selected 时,select 面的离子是相互连接的,即如果你 select 第一面,第二面side 也是 selected,反之亦然。因此,如果您 select 'Soup' 用于第一项,则 Soup 也用于第二项 select。
提前致谢!
我已经弄清楚了,并已将其调整至完美。我创建了一个新的 JSON 数据,另外还为下拉列表添加了一个初始选项,以便自动选择第一个选项。我使用 item.type 作为元素。然后,我使用了以下脚本:
$scope.type = {};
angular.forEach($scope.items, function(value) {
$scope.type = value;
});
之后,我将HTML修改为如下:
<md-list>
<h2 class="md-title" style="color:#3F51B5;">Select Your Side</h2>
<md-divider></md-divider>
<md-list-item layout="row">
<md-select placeholder="Select a Side" ng-model="item.type">
<md-option aria-label="side set" class="md-accent" ng-value="item.name" ng-repeat="item in item.sides">{{ item.name }}</md-option>
</md-select>
</md-list-item>
</md-list>
我在为 phonegap 开发的应用程序中遇到了两个错误,我希望你们中的一位可以帮助我。我正在构建一个包含 3 个不同部分的外卖应用程序:菜单、选项和订单。在“选项”页面中,我有多个复选框和一个使用 md-select 的下拉菜单。我想要做的是,当用户 select 从下拉列表中选择一个选项时,该选项将显示在订单页面中。我得到了它的工作,但是,我得到了一个额外的 "undefined" 文本,我不需要并且想要摆脱它。
这是我为此使用的相关脚本(plunker index.html 中的第 278-281 行):
$scope.selecteds = {};
angular.forEach($scope.items, function(value) {
$scope.selecteds = value;
});
现在,$scope.items 已作为项目数组预加载。
$scope.items = {
"results": [{
"active": false,
"createdAt": "2015-10-05T20:19:58.264Z",
"desc": "With arugula, smoked almonds \u0026 chipotle vinaigrette",
"img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Watermelon-Quinoa-Jimaca-Salad.jpg",
"name": "Watermelon Quinoa Jicama Salad (\u003cspan style=\"color: lightblue;\"\u003eVE\u003c/span\u003e, \u003cspan style=\"color: goldenrod;\"\u003eGF\u003c/span\u003e, \u003cspan style=\"color: yellow;\"\u003eDF\u003c/span\u003e)",
"objectId": "x1zpkWmvmP",
"price": 14,
"flavors": [{
"active": false,
"name": "Vanilla",
"price": 8
}, {
"active": false,
"name": "Almond",
"price": 8
}, {
"active": false,
"name": "Hazelnut",
"price": 8
}, {
"active": false,
"name": "Caramel",
"price": 8
}],
"sizes": [{
"active": false,
"name": "Small",
"price": 0
}, {
"active": false,
"name": "Medium",
"price": 5
}, {
"active": false,
"name": "Large",
"price": 10
}],
"sides": [{
"active": false,
"name": "Soup"
}, {
"active": false,
"name": "Salad"
}, {
"active": false,
"name": "Fries"
}],
"updatedAt": "2015-10-09T17:20:50.527Z"
}, {
"active": false,
"createdAt": "2015-10-05T20:35:01.363Z",
"desc": "Buffalo mozzarella, tomato, marinated artichoke hearts, black olives, pesto \u0026 balsamic drizzle",
"img": "https://signsrestaurant.ca/wp-content/uploads/2015/09/Mediterranean-Salad.jpg",
"name": "Mediterranean Salad (\u003cspan style=\"color: lightgreen;\"\u003eV\u003c/span\u003e, \u003cspan style=\"color: goldenrod;\"\u003eGF\u003c/span\u003e)",
"objectId": "nI5VSpdBUn",
"price": 15,
"flavors": [{
"active": false,
"name": "Chocolate",
"price": 8
}, {
"active": false,
"name": "Strawberry",
"price": 8
}, {
"active": false,
"name": "Mint",
"price": 8
}, {
"active": false,
"name": "Cherry",
"price": 8
}],
"sizes": [{
"active": false,
"name": "Small",
"price": 5
}, {
"active": false,
"name": "Medium",
"price": 10
}, {
"active": false,
"name": "Large",
"price": 15
}],
"sides": [{
"active": false,
"name": "Soup"
}, {
"active": false,
"name": "Salad"
}, {
"active": false,
"name": "Fries"
}],
"updatedAt": "2015-10-09T17:20:30.545Z"
}]
};
我在选项页面中的相关HTML如下:
<md-list>
<h2 class="md-title" style="color:#3F51B5;">Select Your Side</h2>
<md-divider></md-divider>
<md-list-item layout="row">
<md-select aria-label="side set" class="md-accent" placeholder="Select a Side" ng-model="selecteds[name]">
<md-option ng-value="item.name" ng-repeat="item in item.sides">{{ item.name }}</md-option>
</md-select>
</md-list-item>
</md-list>
我的HTML在订单页面如下:
<md-list-item layout="row">
<span>Side: {{selecteds}}</span>
</md-list-item>
这里有一个 plunker 可以理解这一切。不过请注意,我的JS都混在了index.html(提前致歉)
http://plnkr.co/edit/4ByCDzXZfRU7kMX9oURT?p=preview
如您所见,当您按下紫色按钮选择一个项目并将 select 'Soup' 作为边时,它显示为边:{"undefined":"Soup"} 在订单页面,我只需要显示 Side: Soup。
另一个主要问题是当 2 个盘子 selected 时,select 面的离子是相互连接的,即如果你 select 第一面,第二面side 也是 selected,反之亦然。因此,如果您 select 'Soup' 用于第一项,则 Soup 也用于第二项 select。
提前致谢!
我已经弄清楚了,并已将其调整至完美。我创建了一个新的 JSON 数据,另外还为下拉列表添加了一个初始选项,以便自动选择第一个选项。我使用 item.type 作为元素。然后,我使用了以下脚本:
$scope.type = {};
angular.forEach($scope.items, function(value) {
$scope.type = value;
});
之后,我将HTML修改为如下:
<md-list>
<h2 class="md-title" style="color:#3F51B5;">Select Your Side</h2>
<md-divider></md-divider>
<md-list-item layout="row">
<md-select placeholder="Select a Side" ng-model="item.type">
<md-option aria-label="side set" class="md-accent" ng-value="item.name" ng-repeat="item in item.sides">{{ item.name }}</md-option>
</md-select>
</md-list-item>
</md-list>