2014-03-19 53 views
2

我一直在試圖創建一個通用的function角度變化$scope參數值。

我一直在想,爲什麼我不能通過$scope.varargumentfunction例如:

webApp.controller ('VotesCtrl', function ($scope) { 
    $scope.param = 42; 

    change($scope.param); 
    function change(contextParam) { 
     contextParam = (Math.random()*100)+1; 
    }; 
}); 

當我運行這個功能$scope.param保持42

是否有另外一種替代方案:

webApp.controller ('VotesCtrl', function ($scope) { 
    $scope.param = 42; 

    change('param'); 
    function change(contextParam) { 
     $scope[contextParam] = (Math.random()*100)+1; 
    }; 
}); 

My Plunk

+1

您試圖解決的底層問題是什麼? – Phill

+0

瞭解爲什麼http://plnkr.co/edit/9996W3Io4KewA3tgokQR?p=preview無法正常工作。如果我給出的解決方案是唯一的方法 – Canttouchit

+0

我會避免傳遞像這樣的範圍項目,如果你需要將它傳遞給一個函數,我會在本地定義它,並通過它。如果你想改變範圍值,那麼你可以直接調用函數中的範圍項而不需要傳入。 – Mindstormy

回答

6

簡短的回答是「不要綁定到原始值」。請參閱http://stsc3000.github.io/blog/2013/10/26/a-tale-of-frankenstein-and-binding-to-service-values-in-angular-dot-js/

var webApp = angular.module('webApp', []); 

//controllers 
webApp.controller ('VotesCtrl', function ($scope) { 
    $scope.param = { value: 42 }; 

    change($scope.param); 
    function change(contextParam) { 
     contextParam.value = (Math.random()*100)+1; 
    }; 
}); 
+0

對於「瘋狂科學家」+1:D – nilsK

+0

或者您將整個$ scope對象傳遞給函數。不喜歡傳遞範圍或其屬性,所以任何一個選項都不是很好。 – redfox05

相關問題