使用单个模型编辑多个变量
Edit Multiple variables using Single model
有没有办法只使用一个模型编辑三个不同的变量?因为在当前方法中,看起来只有变量值被复制到"editedVar"中。
下面代码的小提琴
<div ng-controller="MyCtrl">
A: {{A}}<br/> B: {{B}} <br/> C: {{C}}<br/>
<input ng-model="editedVar"/>
<br/>
<button ng-click="switchToA()">Switch to A</button>
<button ng-click="switchToB()">Switch to B</button>
<button ng-click="switchToC()">Switch to C</button>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.A = 1;
$scope.B = 2;
$scope.C = 3;
$scope.switchToA = function()
{
$scope.editedVar = $scope.A;
};
$scope.switchToB = function()
{
$scope.editedVar = $scope.B;
};
$scope.switchToC = function()
{
$scope.editedVar = $scope.C;
};
}
你可以用很多方式做到这一点,这里有一个简单且更干燥的方法。
视图(只需保持简单,只需一个函数即可更改当前编辑的变量):-
<input ng-model="editedVar[editing]" />
<br />
<button ng-click="switchTo('A')">Switch to A</button>
<button ng-click="switchTo('B')">Switch to B</button>
<button ng-click="switchTo('C')">Switch to C</button>
控制器:-
function MyCtrl($scope) {
/*Keep the values in an object with respective property name*/
$scope.editedVar = {
A: 1,
B: 2,
C: 3
}
/*Set the default edit property*/
$scope.editing = 'A';
/*Sets the currently edited property based on what is being passed in*/
$scope.switchTo = function (prop) {
$scope.editing = prop;
};
}
小提琴
您也可以这样做,但只能在不使用对象的情况下使用更多的维护代码。
视图:-
<input ng-model="editedVar" ng-change="valueChange()"/>
<br/>
<button ng-click="switchTo('A')">Switch to A</button>
<button ng-click="switchTo('B')">Switch to B</button>
<button ng-click="switchTo('C')">Switch to C</button>
控制器:-
function MyCtrl($scope) {
$scope.A = 1;
$scope.B = 2;
$scope.C = 3;
var editing;
/*Change event to keep the value in sync*/
$scope.valueChange = function(){
$scope[editing] = $scope.editedVar;
}
/*Just one function*/
$scope.switchTo = function (prop) {
$scope.editedVar = $scope[editing = prop];
};
}
小提琴
你想要的是通过非基元类型对引用进行双向绑定,请参见下文:
<div ng-controller="MyCtrl">
A: {{A.val}}<br/> B: {{B.val}} <br/> C: {{C.val}}<br/>
<input ng-model="editedVar.val"/>
<br/>
<button ng-click="switchToA()">Swithc to A</button>
<button ng-click="switchToB()">Swithc to B</button>
<button ng-click="switchToC()">Swithc to C</button>
</div>
var myApp = angular.module('myApp',[]);
function MyCtrl($scope) {
$scope.A = {val: 1};
$scope.B = {val: 2};
$scope.C = {val: 3};
$scope.switchToA = function()
{
$scope.editedVar = $scope.A;
};
$scope.switchToB = function()
{
$scope.editedVar = $scope.B;
};
$scope.switchToC = function()
{
$scope.editedVar = $scope.C;
};
}
@PSL答案的一个限制是,如果其他代码更改了作用域上A
、B
或C
的值,则$scope.editedVar
不会正确更新。相反,以下替代方法使用两个监视来确保正确的 scope 属性保持最新,无论是因为您在输入中使用editedVar
还是通过其他代码更改了它。
分叉的 jsFiddle
var myApp = angular.module('myApp', []);
myApp.controller('MyCtrl', function MyCtrl($scope) {
$scope.A = 1;
$scope.B = 2;
$scope.C = 3;
var propToEdit,
deregPrevWatch;
$scope.switchTo = function(prop) {
propToEdit = prop;
// set up a watch on this property so if anything else updates it
// editedVar gets correctly updated.
// Make sure to deregister the previous watch first.
if (deregPrevWatch)
deregPrevWatch();
deregPrevWatch = $scope.$watch(prop, function(val) {
$scope.editedVar = val;
});
};
$scope.$watch('editedVar', function(newVal, oldVal) {
// skip the initialisation step
if (newVal !== oldVal)
$scope[propToEdit] = newVal;
});
// start off pointing at A
$scope.switchTo('A');
});
p {
margin: 2px 0;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.7/angular.min.js"></script>
<div ng-app="myApp">
<div ng-controller="MyCtrl">
<p>A: {{A}}</p>
<p>B: {{B}}</p>
<p>C: {{C}}</p>
<input ng-model="editedVar" />
<p>
<button ng-click="switchTo('A')">Switch to A</button>
<button ng-click="switchTo('B')">Switch to B</button>
<button ng-click="switchTo('C')">Switch to C</button>
<button ng-click="A = 5">Set A to 5</button>
</p>
</div>
</div>
相关文章:
- 在可编辑行内设置变量
- 角度变量在编辑输入字段之前不显示
- 如何在编辑范围变量时(暂时)避免摘要循环
- 用于编辑LESS CSS变量的Javascript库
- 如何从ajax get请求的回调函数中编辑javascript变量的值
- 使用单个模型编辑多个变量
- 在回调函数中导出变量 ||重新编辑
- 比较和交错变量以使用 AngularJS 进行编辑
- 使用AngularJS重置变量和编辑数组
- 根据变量的值编辑不同的对象
- 在html网页上从javascript编辑和显示php文件中的变量
- 编辑数组中的变量
- 如何在可编辑的GridX中将局部变量作为属性提供给单元格编辑器
- 编辑变量,同时在angularjrs中对其进行迭代
- 将HTML代码放入变量中,以便于查看和编辑它
- 网站是否有可能知道你是否编辑了他们的javascript变量?
- 如何从另一个类(编辑:另一个js页面)访问ReactJS渲染中的变量(ES6和Node正在使用)
- 编辑(追加?)存储在jquery变量中的字符串
- 在TinyMCE中保存替换变量,但在可视化编辑器中显示替换的内容
- 我如何创建一个变量,可以在其他模块中编辑,而不是全局