2014-11-07 3 views
4

Я пытаюсь передать область в функцию, и я не могу заставить ее работать правильно. Вот что у меня есть -угловой, передать область в функцию (передавая область как переменную?)

ng-click="clickFunction(scope1)" 

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

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

Так что - это prett прямо вперед, я просто хочу, чтобы передать в объеме и установить его в ложное в этой мыши. Когда я регистрирую область действия после ее изменения, она все еще говорит, что это правда. Я также пробовал -

$scope.passedScope 

То, что я пытаюсь сделать, это установить $ scope.scope1 = false. Он установлен в верхней части контроллера как истинный и управляет кнопкой рядом с этой кнопкой, имеющей ng-disabled = "! Scope1", я не могу просто сделать scope1 =! Scope! на клик, потому что он проходит через модальный, чтобы подтвердить, что пользователь хочет завершить, а затем запускает modalInstance.result.then (function() {там мне тогда нужно установить переданную область в false. Я бы просто вызвал область напрямую, но Я пытаюсь сделать функцию, которую можно использовать на нескольких функции удаления, таким образом, пытается передать он сферу, которая нуждается в изменении ложь.

Я думал, что я мог бы просто передать сферу через функцию.

Спасибо!

update В соответствии с тем, что @Josep показал мне сегодня, я смог сделать работу, пройдя область действия в виде строки, как так

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

и затем делать

$scope[passedScope] = false; 
+0

@Josep функция щелчка делает тонну других вещей, я вырезаю их, потому что они arent актуальны, это просто нужно установить эту область в true, если некоторые другие вещи происходят в функции щелчка. – ajmajmajma

+0

где область 1 впервые объявлена ​​/ использована? –

+0

Не совсем ясно из примера, что вы пытаетесь сделать. scope = false? – mccainz

ответ

10

Если вы хотите, чтобы передать текущий объем части вашей точки зрения на функцию, способ сделать это будет:

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 - это объект, который содержит набор свойств, событий и функций. Некоторые из них унаследовали от своих предков до $rootScope, а некоторые из них являются обычными.

Может быть, что вы пытаетесь сделать, это пройти один из свойств scope в качестве параметра функции, так что вы можете изменить его в этой функции. Однако в javascript единственный способ передать параметр по ссылке - передать объект и обновить одно из его свойств, если вы передадите свойство boolean функции, тогда вы передадите значение этого логического свойства, а не ссылку , Пожалуйста, взгляните на это: Pass Variables by Reference in Javascript.

+0

Объем, который я приношу, не является моделью объекта щелчка – ajmajmajma

+0

@ajmajmajma so? – Josep

+0

Ах да, это объяснило бы это, большое спасибо за то, что нашли время, чтобы ответить на это! – ajmajmajma

2

В качестве альтернативы Josep's answer (который помог мне найти его), вы могли бы просто назвать так:

ng-click="clickFunction()" 

И тогда в вашей функции вы можете обратиться текущую область с this:

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

    //... 
} 

Это очень полезно при использовании ng-include, который создает новую область действия, поэтому clickFunction фактически находится в родительском пространстве.

Смежные вопросы