AngularJs -使用$parent ng-model从控制器更改/推送选择颜色
AngularJs - Change/Push select color from controller with a $parent ng-model
下面是一个非常简单的例子:JsFiddle
下面是MainCtrl
function MainCtrl($scope)
{
$scope.color = {};
$scope.colors = [
{ name: "red" },
{ name: "yellow" },
];
var newColor = $scope.color;
newColor.name = "blue";
$scope.colors.push(newColor);
$scope.selectedColor = newColor;
}
我有三个html表单:
- MainForm.Html
- AvailableColors.html(部分,用ng-include嵌入MainForm.html)
- AddNewColor.html
MainForm.Html看起来像这样:
<div ng-app ng-controller="MainCtrl">
<div ng-include="'AvailableColors.html'">
</div>
AvailableColors.html看起来像这样:
<select ng-model="$parent.selectedColor" ng-options="color.name for color in colors">
<option value="" selected>Select Color ..</option>
</select>
<a href="#">Add New Color</a>
<br />
value is {{ selectedColor }}
在JsFiddle示例中,我试图模拟用户添加新颜色。我需要AvailableColors' ng-model有'$parent。',因为它来自于ng-include,并且没有'$parent',所以所选择的内容将不在表单提交的范围内。
我的问题是当用户添加新添加的颜色时,我无法将其推送到AvailableColors.html。
任何想法?
注意:我知道在JsFiddle中添加了新的颜色"蓝色",但那是因为在那个例子中确实没有ng-include。
显然,当实际存在ng-include时,它不会出现,除非刷新页面。
父节点只能从子节点读取。要做你想做的,你必须使用父控制器中的方法。
$scope.setSelected = function(color) {
$scope.selectedColor = color;
}
$scope.addColor = function(newColor) {
$scope.colors.push(newColor);
}
然后,你可以使用像你的html:
一样的输入//Selector
<select ng-click="setSelected(selectColor)" ng-model="selectColor" ng-options="color.name for color in colors">
<option value="" selected>Select Color ..</option>
</select>
//Add control
<input type="text" ng-model="newColor.name" />
<button id="addBtn" ng-click="addColor(newColor)">Add</button>
可以看到,我在select中添加了一个ng-click来更新父元素
如果你在$作用域中使用引用对象(这是Angular团队推荐的),你就不需要在任何地方使用$parent
:
$scope.model = {selectedColor: ''}; // use an object here
$scope.addColor = function(newColorName) {
$scope.colors.push({name: newColorName});
};
AvailableColors.html:
<select ng-model="model.selectedColor" ng-options="color.name for color in colors">
<option value="" selected>Select Color ..</option>
</select>
<br>
<input type="text" ng-model="colorName">
<button ng-click="addColor(colorName); colorName=''">Add</button>
<br />
value is {{ model.selectedColor }}
相关文章:
- Javascript对象类在单击时打开窗口进行颜色选择,并在更改时替换对象背景颜色
- 通过Ember颜色选择器更新SCSS变量
- 如何动态创建许多Jquery颜色选择器(eyecon)
- JS-颜色选择器只有第一个工作
- 取消光谱颜色选择器不工作
- 如何使HTML5颜色选择器返回颜色名称而不是颜色代码
- 如何使用颜色选择器来更改背景中的文本
- HTML中的颜色选择器对话框
- 具有半径(blur?)的颜色选择器的算法
- Adobe Acrobat X疑难解答下拉列表颜色选择.需要单击选择
- 如何使用javascript重置颜色选择器
- 如何设置'样式:color'淘汰赛中的颜色选择器.JS
- 手动更新引导程序颜色选择器
- 引导颜色选择器,如何在下拉列表中设置颜色值框
- Div 渐变的颜色选择器
- Extjs 6.0 颜色选择器十六进制字段
- 为什么这个jQuery颜色选择器在引导模式中失败
- 如何在 jquery 颜色选择器中设置数字十六进制颜色
- dhtmlx 布局中的颜色选择器
- 带有 css 的 html 中颜色选择器的绝对位置