如何$在switch语句中查看变量?

时间:2016-06-06 16:57:40

标签: javascript angularjs

如何正确添加$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';
  };

});

plunker

1 个答案:

答案 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';
  };   
});

Plunkr

通过使用对象,您可以将多个变量指向同一个对象。当我们更改对象的属性值时,我们不会影响对象本身的引用。

在下面的第一个案例中,我们有一个&amp; b最初都指向字符串“lorem”。然后我们改变a指向“ipsum”,但是b仍然在看“lorem”的值,所以现在a&amp; b有两个不同的值。 Pass by reference visual 在第二种情况下,我们有一个&amp; b都看着一个物体。虽然我们改变了对象a&amp;的属性值。 b仍然在看同一个物体。如果我们已经完成了a={value:"ipsum"},我们将再次遇到第一个案例,因为他们正在更改a以查看新对象。