У меня есть элементы 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
}
вы делаете это неправильно, 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Проверено для проверки и снятия отметки.
Сделайте это надлежащим образом.
Переместите функции внутри вашего контроллера. Назовите их через 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.() $ применяются(); Это снова очень плохо, и его следует полностью избегать.
использование
$scope.$apply();
Он будет запускать цикл дайджеста, а ваш ng-if будет работать так, как вы ожидаете.