angular,将范围传递给函数(将范围作为变量传递?)

时间:2014-11-07 16:14:48

标签: javascript angularjs

我试图将范围传递给函数,但我似乎无法使其正常工作。这就是我所拥有的 -

ng-click="clickFunction(scope1)"

//the function 
$scope.clickFunction = function(passedScope){

      passedScope = false;
      console.log($scope.scope1);

所以 - 它直接前进我只想传入范围并在此点击中将其设置为false。当我更改它后记录范围时,它仍然说它是真的。我也试过了 -

  $scope.passedScope

我要做的是设置$ scope.scope1 = false。它在控制器的顶部设置为true,并通过具有ng-disabled ="!scope1"的按钮控制附近的按钮,我不能只做一个scope1 =!scope!在点击,因为它通过一个模态来确认用户想要完成然后运行modalInstance.result.then(function(){然后我需要将传递的范围设置为false。我只是直接调用范围,但我尝试创建一个可以在多个删除函数中使用的函数,从而尝试将需要更改的范围传递给false。

我以为我可以通过该功能传递范围。

谢谢!

更新 根据@Josep今天向我展示的内容,我能够通过将范围作为字符串传递来解决这个问题

   ng-click="clickFunction('scope1')"

然后做

$scope[passedScope] = false;

2 个答案:

答案 0 :(得分:11)

如果要将视图的一部分当前范围传递给函数,那么执行此操作的方法是:

ng-click="clickFunction(this)"

但是在你的函数中你应该像这样对待这个范围:

$scope.clickFunction = function(passedScope){
   passedScope.somePropertyOfTheScope = false;//<---Notice the difference with the code that you are suggesting.

您无法将scope设置为false ,您可以将其中一个属性设置为false,但不能将范围本身设置为$rootScope。这没有任何意义,因为 scope 是一个包含一组属性,事件和函数的对象。其中一些从其范围祖先继承至scope,其中一些是自定义的。

也许您要做的是将{{1}}的一个属性作为函数的参数传递,以便您可以在该函数中更改它。但是,在javascript中,通过引用传递参数的唯一方法是传递对象并更新其属性之一,如果将布尔属性传递给函数,那么您将传递该布尔属性的值,而不是引用。请看一下:Pass Variables by Reference in Javascript

答案 1 :(得分:3)

作为Josep's answer的替代方法(帮助我找到它),你可以简单地这样打电话:

ng-click="clickFunction()"

然后在您的函数中,您可以使用this

来引用当前范围
$scope.clickFunction = function() {
   this.somePropertyOfTheScope = false;

   //...
}

当使用创建新范围的ng-include时,这非常有用,因此clickFunction实际上是在父范围内。