Angular中如何将作用域传递到函数中(将作用域作为变量传递)?

5
我正在尝试将作用域传递到一个函数中,但似乎无法正确运行。以下是我的代码 -
ng-click="clickFunction(scope1)"

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

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

所以,这很简单,我只想在这个点击事件中传递作用域并将其设置为false。当我改变它后记录作用域,它仍然显示为true。我也尝试过 -

  $scope.passedScope

我想要做的是将$scope.scope1设置为false。它在控制器的顶部被设置为true,并通过附近的按钮控制着,因为该按钮具有ng-disabled="!scope1",我不能仅在单击时执行scope1 =!scope1,因为它会通过模态框来确认用户是否想要完成操作,然后运行modalInstance.result.then(function(){在那里,我需要将传递的作用域设置为false。我可以直接调用作用域,但我正在尝试创建一个可以在多个删除函数中使用的函数,因此尝试将需要更改为false的作用域传递给它。

我想可以通过函数将作用域传递进去。

谢谢!

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

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

然后执行

$scope[passedScope] = false;

@Josep,click函数还有很多其他功能,但它们与此无关,这只需要在click函数中发生某些其他事情时将此范围设置为true。 - ajmajmajma
scope1 第一次在哪里声明/使用? - Tiago Coelho
从示例中根本无法清楚地了解您想要做什么。scope = false? - mccainz
@ajmajmajma,我已经更新了我的答案,现在我认为我明白你想做什么了,请看一下。 - Josep
@mccainz 我尝试更详细地阐述一下。我正在尝试将范围设置为false,但我希望能够传递它,以便在此函数的多个不同用途中动态使用。对于造成的困惑,我很抱歉! - ajmajmajma
2个回答

15

如果您想要将视图的某个部分的当前作用域传递给一个函数,正确的方法是:

ng-click="clickFunction(this)"

但是在您的函数中,您应该像这样处理该作用域:

$scope.clickFunction = function(passedScope){
   passedScope.somePropertyOfTheScope = false;//<---Notice the difference with the code that you are suggesting.
你无法将scope设置为false,但可以将其属性之一设置为false,但不能直接设置scope本身。这样做没有任何意义,因为scope是一个包含一组属性、事件和函数的对象。这些属性从其祖先作用域继承到$rootScope,有些是自定义的。

也许你正在尝试的是将scope的一个属性作为函数的参数传递,以便在该函数中更改该属性。然而,在JavaScript中,唯一通过引用传递参数的方法是传递对象并更新其中一个属性,如果你将布尔属性传递给函数,则将传递该布尔属性的值,而不是引用。请参阅此内容:Pass Variables by Reference in Javascript


我引入的作用域不是点击对象的模型。 - ajmajmajma
啊,是的,这就解释了一切。非常感谢您抽出时间来回答这个问题! - ajmajmajma
@ajmajmajma 没问题!很高兴知道我能帮到你。 - Josep
今天你向我展示的方法让我绕过了这个问题,就像这样传递变量名作为字符串 - ng-click="clickFunction('scope1')",然后执行 $scope[passedScope] = false; - ajmajmajma

3

作为Josep的答案的替代方案(它帮助我找到了它),您可以简单地这样调用:

ng-click="clickFunction()"

然后在您的函数中,您可以使用this引用当前作用域:

$scope.clickFunction = function() {
   this.somePropertyOfTheScope = false;

   //...
}

当使用创建新作用域的ng-include时,这非常有用,因此clickFunction实际上位于父级作用域。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接