如何正确添加$watch
功能并结合switch语句?我基本上试图创建一个适用于我的函数的变量(IE:vm.clear()
),并根据所选内容(IE:A或B)将其传递给DOM。
所以,选择' A'点击vm.clear()
应将{{vm.A}}
设置为0,只留下{{vm.B}}
。同样,选择' B'点击vm.clear()
应将{{vm.B}}
设置为0,只留下{{vm.A}}
。
<div ng-class="{selected:vm.selectedInput==='A'}" ng-click="vm.selectInput('A')">{{vm.A}}</div>
<div ng-class="{selected:vm.selectedInput==='B'}" ng-click="vm.selectInput('B')">{{vm.B}}</div>
<button ng-click="vm.clear()">Clear</button>
.controller('MyCtrl', function($scope) {
var vm = this;
vm.selectedInput = 'A';
vm.A = '5';
vm.B = '6';
vm.selectInput = function(input) {
vm.selectedInput = input;
switch (input) {
case 'A':
$scope.$watch('selectedOutput', function() {
vm.selectedOutput = vm.A;
});
break;
case 'B':
$scope.$watch('selectedOutput', function() {
vm.B = vm.selectedOutput;
});
break;
}
};
vm.clear = function() {
vm.selectedOutput = '0';
};
});
答案 0 :(得分:2)
如果您使用对象而不是A&amp;的值B您可以消除代码的一些复杂性。我添加了另一个名为selections
的对象,但您可以在vm
对象上轻松执行此操作。我们将name属性添加到两个对象中,以便您可以在视图中获取名称。
<div ng-click="vm.selectInput('A')" ng-class="{selected:vm.selectedInput.name === 'A'}">{{vm.A}} Select me</div>
<div ng-click="vm.selectInput('B')" ng-class="{selected:vm.selectedInput.name === 'B'}">{{vm.B}} Or me</div>
<button ng-click="vm.clear()">Clear</button>
.controller('MyCtrl', function() {
var vm = this;
vm.selections = {
A : {
name : 'A',
value : 5
},
B: {
name: 'B',
value: 6
}
}
vm.selectedInput = vm.selections.A;
vm.selectInput = function(input) {
vm.selectedInput = vm.selections[input]
};
vm.clear = function() {
vm.selectedInput.value = '0';
};
});
通过使用对象,您可以将多个变量指向同一个对象。当我们更改对象的属性值时,我们不会影响对象本身的引用。
在下面的第一个案例中,我们有一个&amp; b最初都指向字符串“lorem”。然后我们改变a指向“ipsum”,但是b仍然在看“lorem”的值,所以现在a&amp; b有两个不同的值。
在第二种情况下,我们有一个&amp; b都看着一个物体。虽然我们改变了对象a&amp;的属性值。 b仍然在看同一个物体。如果我们已经完成了a={value:"ipsum"}
,我们将再次遇到第一个案例,因为他们正在更改a以查看新对象。