我试图将范围传递给函数,但我似乎无法使其正常工作。这就是我所拥有的 -
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;
答案 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
实际上是在父范围内。