Угловой нг-если не отвечает, как ожидалось

0

У меня есть элементы li которые имеют оператор ng-if, привязанный к флажку. Если я физически проверю флажок, ng-if ответит так, как ожидалось. Однако, если я установил или снял флажок с помощью JavaScript, флажки будут проверяться или отменены, как ожидалось, но ng-if не отвечает. Это работает так, как должно? Есть лучший способ сделать это?

Вот мои примеры кода: "[]" = "<>"

HTML - Часть 1

[li id = "homebutton" ng-if = "homechecked! = true" onclick = "homeclicked()"] [a ng-href= "/"] [img src= "images\Neck01Home.png" alt= "Главная страница "/] [/a]

[li id = "thebandbutton" ng-if = "homechecked === true" onclick = "thebandclicked()"] [a ng-href= "/theband/"] [img src= "images\Neck01TheBand.png" alt= "The Band"/] [/a]

HTML - Часть 2

[label class= "menucontroller"] Home2: [input class= "menucontroller" id = "homecb" type = "checkbox" ng-model = "homechecked" ng-init = "homechecked = true"/] [/label] [ br/]

[label class= "menucontroller"] TheBand2: [input class= "menucontroller" id = "bandcb" type = "checkbox" ng-model = "thebandchecked"/] [/labe] [

[label class= "menucontroller"] Gallery2: [input class= "menucontroller" id = "gallerycb" type = "checkbox" ng-model = "gallerychecked"/] [/label] [br/]

JavaScript:

window.onload = function () {
}

function homeclicked() {
    document.getElementById('homecb').checked = true;
    document.getElementById('bandcb').checked = false;
    document.getElementById('gallerycb').checked = false;
}

function thebandclicked() {
    document.getElementById('homecb').checked = false;
    document.getElementById('bandcb').checked = true;
    document.getElementById('gallerycb').checked = false;
}

function galleryclicked() {
    document.getElementById('homecb').checked = false;
    document.getElementById('bandcb').checked = false;
    document.getElementById('gallerycb').checked = true
}
  • 1
    @ebik правильно отредактируйте свой вопрос .. вы можете использовать функцию angularjs, чтобы установить и снять флажок.
Теги:
checkbox

3 ответа

1

вы делаете это неправильно, ng-if не запускается, потому что вы управляете только проверенным и не отмеченным флажком (используя javascript), а не ng-модель, не пытайтесь использовать javascript для этого, вместо этого делайте это на своем угловой контроллер.

контроллер:

$scope.homeclicked = function() {
  $scope.homechecked = true;
  $scope.thebandchecked = false;
  $scope.gallerychecked = false;
};

ng-model на вкладках checkbox обрабатывает флажки и не проверяет их, также существует встроенная директива https://docs.angularjs.org/api/ng/directive/ngПроверено для проверки и снятия отметки.

0

Сделайте это надлежащим образом.

Переместите функции внутри вашего контроллера. Назовите их через ng-click. Пусть функции изменяют переменные области видимости, привязанные к пометкам.

<li id="homebutton" ng-if="homechecked != true" ng-click="homeclicked()">

В то же время внутри вашей области...

$scope.homeclicked = function  {
    $scope.homechecked = true;
    $scope.thebandchecked = false;
    $scope.gallerychecked = false;
}

Если вы действительно хотите не обращать внимания на мой совет и продолжать то, что у вас есть, что очень плохо, вы можете добавить эту строку в свои функции: angular.element(document.getElementById('homecb')). $ Scope.() $ применяются(); Это снова очень плохо, и его следует полностью избегать.

  • 0
    Миссия выполнена .... спасибо.
-2

использование

 $scope.$apply();

Он будет запускать цикл дайджеста, а ваш ng-if будет работать так, как вы ожидаете.

  • 0
    Спасибо за вклад, я хочу сделать это правильно .... Я новичок в Angular (очевидно!). Я попытаюсь эти предложения завтра. Сейчас очень поздно. Спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню