将$ scope对象传递给AngularJS中的函数

时间:2014-03-20 08:51:01

标签: angularjs

我昨天问过一个类似的question但是有区别。 我尝试创建一个通用 function,它将更改scope object(非原始) 但似乎没有工作,我不明白为什么?

我的代码:

webApp.controller ('VotesCtrl', function ($scope) {
    $scope.param = {name: 'Ron', age: 18};        

    change($scope.param);

    function change(contextParam) {
      contextParam = {name:'dan', age: 12};
    }
});

似乎change function$scope.param没有任何更改,即使我是{m} 通过reference

当我按照以下代码进行更改时,它正在运行!

webApp.controller ('VotesCtrl', function ($scope) {
    $scope.param = {name: 'Ron', age: 18};

    change($scope.param);

    function change(contextParam) {
      contextParam.name = 'dan';
      contextParam.age = 12;
    }
});

我做错了什么?你怎么解释这种行为?

My Plunk

1 个答案:

答案 0 :(得分:0)

contectParam是对象的引用。当您使用赋值运算符=时,您更改contextParam变量的值 - 它将停止作为对象的引用并获取完全不同的值。

但是,当您访问contextParam引用的对象的属性时,您可以更改其值,从而使您的更改在函数范围之外可见。

作为旁注,如果你这样做会更好:

function change() {
    return {name: 'dan', age: 12};
}
$scope.param = change();