Легкое совместное использование одних и тех же данных между различными представлениями с помощью factories
( заводской документации AngularJS ). Попробуйте этот пример , он использует простую фабрику с именем myFactory
для обмена данными между контроллерами. Это также работает на том же контроллере, что и в вашем случае.
var myApp = angular.module("myApp",[ "ui.router"]);
myApp.config(function ($stateProvider, $urlRouterProvider){
$stateProvider.state("state1", {
url: "#",
template: '{{ aValue }}
',
controller: "myController"
}).state("state2", {
url: "#",
template: '{{ aValue }}
',
controller: "myController"
});
});
myApp.controller( "myController", function($scope, myFactory) {
$scope.aValue = myFactory.myValue;
$scope.bindValue = function (value) {
$scope.aValue = value;
myFactory.myValue = value;
}
});
myApp.factory('myFactory', function () {
return {
myValue: ''
}
});
Вы можете использовать комбинацию CSS и jQuery для достижения этой цели. Я предлагаю вам добавить некоторые общие классы к элементам (пиктограммам), чтобы их было легче выбирать.
Ваш CSS может иметь значения по умолчанию, а в условных выражениях jQuery просто изменить это состояние по умолчанию. По умолчанию не активен и в jQuery просто измените значения в случае активных. Это если вы хотите изменить источник изображения. Для цветов и других вещей, вы можете использовать CSS. Просто добавьте стили под классом .active
.
См. Ниже
код довольно прост. Если вам нужно подробное объяснение, пожалуйста, дайте мне знать. А также, возможно, я не правильно понял ваш вопрос. Просто скажите мне в комментариях ниже
$(".item").click(function(event) {
const otherContent = $(this).siblings().children()
const thisContent = $(this).children();
event.preventDefault();
otherContent.hide()
$(thisContent).removeClass("hidden").show()
$(this).addClass("active");
$(this).siblings().removeClass('active')
if ( $(this).is("#item-a")) {
// do stuff here
thisContent.css('color', 'pink')
} else if ( $(this).is("#item-b")) {
// do stuff here
thisContent.css('color', 'green')
} else if ( $(this).is("#item-c")) {
// do stuff here
thisContent.css('color', 'purple')
}
});
.item {
/* no active class */
background: red;
}
.item.active {
/* with active class */
background: blue;
}
.item > div {
display: none;
height: 100px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="item-a" class="item">
iconA
<div id="content-a">
content A
</div>
</div>
<div id="item-b" class="item">
iconB
<div id="content-b">
content B
</div>
</div>
<div id="item-c" class="item">
iconC
<div id="content-c">
content C
</div>
</div>
вы можете заставить условие работать, если нет определенного класса или вы можете добавить класс. пожалуйста, обратитесь к приведенному ниже коду.
я использовал jquery и css для объяснения этой проблемы.
blockquote>
$('.det').on('click',function(){ if($(this).hasClass('active')){ $(this).removeClass('active'); }else{ $(this).addClass('active'); } })
.active{ background: green; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="det">click here again and again</div> <div class='det'>click here again and again</div>