2015-08-09 2 views
0

Я пытаюсь переключить класс при нажатии на кнопку «Сохранить», но также вызвать функцию. Я использую coffeescript. Функция вызывается, но переменная никогда не получает значение false.angularjs изменить переменную ng-repeat и функцию вызова

div(ng-class="{'someclass':setListFocus}, ng-repeat="item in items") 

    a(ng-click="setListFocus=false;someFunction();") 
    span(class="gs-desktop") Save 
    // Delete user data. 
    a(ng-click="setListFocus=true") 
    span Edit 
+1

у вас нет достаточно коды здесь, чтобы воспроизвести проблему, но моя первая догадка, что вы жертва [JavaScript Prototype Inheritance] (http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypical-inheritance-in-angularjs), из-за использования примитива вместо объекта , (Правило «Всегда использовать точку в привязках»). – Claies

+0

может быть, но он отлично работает без someFunction() там – user1572796

+0

делает 'someFunction()' change 'setListFocus'? – Claies

ответ

0

Я предполагаю, что на вашем маленьком примере отсутствуют все виды данных. я бы рекомендовал либо с помощью controllerAs, например:

<div ng-controller="myController as vm"> 

, а затем изменив привязки vm.setListFocus.

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

function myController($scope) { 
    $scope.list = { focus: false }; 
} 

и изменение привязки к list.focus вместо этого. Это решит проблемы с наследованием области видимости.

0

Вы могли бы начать someFunction() с переключая значение setListFocus

$scope.someFunction = function(){ 
    $scope.setListFocus = !$scope.setListFocus; 
    // ... rest of someFunction() 
} 

И тогда угловой шаблон будет только это:

a(ng-click="someFunction()") 

Другая вещь, которую вы могли бы сделать, это создать переключить функцию ListFocus, которая может принимать необязательный параметр обратного вызова. Это означает, что вы можете переключать listfocus между true или false и, возможно, выполнять другую функцию. Я не буду продолжать отвечать на CoffeeScript, потому что я не знаком, and not everyone is.

$scope.toggleListFocus = function(andThen = false){ 
    $scope.listFocus = !$scope.listFocus; 
    if(andThen==false) andThen(); 
} 
//usage.. 
//toggle $scope.listFocus 
enter code here 
a(ng-click="toggleListFocus()") 
//toggle then someFunction() 
a(ng-click="toggleListFocus(someFunction())") 
Смежные вопросы