2015-09-25 80 views
0

好吧,我有多個範圍的變量。 我將它們傳遞到這樣的切換功能。AngularJS更改範圍變量在NG-點擊傳遞變量的函數

<button ng-click="controller.toggle(controller.data.variable)">Change</button> 

在點擊我要改變這樣的

controller.toggle = function(data) { 
    if(toggled) { 
     data = 'test'; 
    } 
} 

變量有什麼辦法來實現這一目標?

我已經搜索解決方案,但一無所獲。

+0

這有什麼錯以上? – tymeJV

+0

變量「data」已更新,但範圍變量本身(controller.data.variable)不是。 – Marco

回答

2

是否this幫助?

HTML:

<div ng-controller="MainCtrl"> 

    <div> 
    <button ng-click="toggle('variable1')">Change Variable 1</button> 
    </div> 

    <div> 
    <button ng-click="toggle('variable2')">Change Variable 2</button> 
    </div> 

    <pre>variable1: {{variable1}}</pre> 
    <pre>variable2: {{variable2}}</pre> 
</div> 

JS:

angular.module('myApp', []).controller('MainCtrl', function($scope) { 
    $scope.variable1 = 'on'; 
    $scope.variable2 = 'off'; 

    $scope.toggle = function(propName) { 
    var val = $scope[propName]; 
    $scope[propName] = val === 'on' ? 'off' : 'on'; 
    }; 
}); 

修訂example(請不要恨我使用eval)

HTML:

<div ng-controller="MainCtrl"> 
    <div> 
    <button ng-click="toggle('settings.section.value1')">Change Variable 1</button> 
    </div> 
    <div> 
    <button ng-click="toggle('settings.section.value2')">Change Variable 2</button> 
    </div> 

    <pre>variable1: {{settings.section.value1}}</pre> 
    <pre>variable2: {{settings.section.value2}}</pre> 
</div> 

JS:

angular.module('myApp', []).controller('MainCtrl', function($scope) { 
    $scope.settings = { 
    section: { 
     value1: 'on', 
     value2: 'off' 
    } 
    }; 

    $scope.toggle = function(prop) { 
    var val = eval("$scope." + prop); 
    if(val === 'on') { 
     eval("$scope."+ prop +"= 'off'"); 
    } else { 
     eval("$scope."+ prop +"= 'on'"); 
    } 
    }; 
}); 
+0

我也試過這個,但問題是變量是多維的。像settings.section.value,所以像這樣訪問它不工作(至少我怎麼試了) – Marco

+0

@Marco我已經更新了答案,但它不是很好:) – o4ohel