AngularJs имеет собственную реализацию для тайм-аутов.Используя нативный setTimeout()
, вы скрываете то, что пытаетесь сделать, под углом.В результате AngularJs даже не подозревает, что ваш $scope
изменился.
Правильным способом было бы внедрить службу $timeout
и заменить ваш setTimeout()
вызов на $timeout
(я сократил остальныекода для упрощения):
angular.module("YourModule")
.controller("YourController", ["$scope", "$timeout", YourController]);
function YourController($scope, $timeout)
{
...
$scope.doSomeMagic = function()
{
$timeout(function()
{
$("#closeMenuS").click(function()
{
$scope.displayResults = false;
$("#sidebar").css({pointerEvents: "auto"});
$("#default").css({pointerEvents: "auto"});
});
}, 30);
}
...
}
Вот почему работает функция $apply()
, предложенная Итамаром.Вы в основном заставляете AngularJ обнаруживать изменения.Однако лучше всего использовать инструменты, предоставляемые AngularJs, и избегать нативного JavaScript, когда это возможно.