我有两个div。如果someExpression(使用FirstController范围)为true,我只想显示第一个。第二个div应该根据是否显示第一个div来调整和设置一个类。第一个div:
<div class="col-md-4" ng-show='someExpression' ng-controller='FirstController' id='first'></div>
第二个div:
<div ng-class="document.getElementById('first').style == 'none' ? 'col-md-8' : 'col-md-12'" ng-controller='SecondController'></div>
我宁愿使用比上面更有棱角的方式(我还没有工作)。那么 - 有没有办法检测第一个div是否可见?
答案 0 :(得分:2)
我建议使用服务在控制器之间共享数据,即:
<强> JS 强>
var app = angular.module('app', []);
app.service('shared', function() {
var visisble = true;
return {
visisble: visisble
};
});
app.controller('FirstController', function($scope, shared) {
$scope.someExpression = shared;
});
app.controller('SecondController', function($scope, shared) {
$scope.someExpression = shared;
$scope.update = function() {
shared.visisble = !shared.visisble;
}
});
<强> HTML:强>
<body ng-app="app">
<div class="row">
<div id="first" ng-controller="FirstController" class="col-xs-4" ng-show="someExpression.visisble">
<div>expresion {{someExpression.visisble}}</div>
</div>
<div ng-controller="SecondController" ng-class=" someExpression.visisble ?'col-xs-8' :'col-xs-12'">
<button ng-click="update()">show/hide</button>expresion {{someExpression.visisble}}</div>
</div>
</body>
答案 1 :(得分:0)
您是否尝试过使用jQuery
angular.element('#first').hasClass('ng-hide')
答案 2 :(得分:0)
由于第一个元素的可见性由您(someExpression
)控制,因此第二个元素的可见性可能是:
<div ng-class="{'col-md-8': someExpression, 'col-md-12': !someExpression}"
ng-controller='SecondController'></div>
即。您使用someExpression
和!someExpression
来控制应用哪些类。请注意类名称旁边的引号。
答案 3 :(得分:0)
我假设someExpression
绑定到FirstController
(如果没有,那么只需在ng-class
中使用相同的表达式)...
在HTML上:
ng-class="isVisible('first') ? 'red' : 'blue'"
在 SecondController :
上$scope.isVisible = function(el) {
return angular.element(document.getElementById(el)).hasClass('ng-hide');
}
答案 4 :(得分:0)
您可以使用指令执行此操作,但很难以编程方式使用两个不同的控制器。
AngularJS
var app = angular.module('divsApp', []);
app.controller('FirstCtrl', function ($scope, $rootScope) {
$scope.visible = true;
});
app.controller('SecondCtrl', function ($scope, $rootScope) {
});
app.directive('visible', function () {
return {
restrict: 'A',
link: function (scope, element, attr) {
if (scope.visible) {
$('#second-div').show();
}
}
}
});
HTML
<div ng-app="divsApp">
<div ng-controller="FirstCtrl">
<div ng-show="visible" visible>First Div</div>
</div>
<div ng-controller="SecondCtrl" style="display:none;" id="second-div">Second Div</div>
</div>