您应该能够像显示一样直接从控制器控制隐藏/显示功能。以下是使用按钮触发隐藏显示切换的工作示例。
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.1.5" data-semver="1.1.5" src="http://code.angularjs.org/1.1.5/angular.min.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="myapp" ng-controller="mycontroller">
<span ng-hide="hideSpan">Some Content to hide</span>
<button ng-click="toggleHide()"/>Toggle Hide</button>
</body>
</html>
还有剧本。
angular.module('myapp', []).controller('mycontroller', function($scope){
$scope.hideSpan = true;
$scope.toggleHide = function(){
if($scope.hideSpan === true){
$scope.hideSpan = false;
}
else{
$scope.hideSpan = true;
}
}
});
我创建了一个简单的 plunker 来在http://plnkr.co/edit/50SYS0Nys7TWmJS2hUBt?p=preview上展示这一点。
至于 $apply 导致错误的原因,这是可以预料的,因为直接作用域(由 $scopeProvider 提供)变量操作已经在观察变化并包装到核心角度的默认应用中,因此任何变化都将是自动应用于该变量的其他绑定。