Контроллер можно улучшить, заменив $ scope.IsVisible с переменной, которая просто указывает на выбранный элемент в mainList. Тогда вам не нужно поддерживать массив логических элементов.
$scope.selected = null;
$ scope.click можно изменить следующим образом:
$scope.click = function(key, index) {
$scope.selected = $scope.mainList[index];
$scope.myObj = {
"top": key.currentTarget.offsetTop + "px",
"left": key.currentTarget.clientWidth + 10 + "px"
}
};
Кроме того, вам нужно будет обновить свой HTML, чтобы использовать $ scope.selected, чтобы контролировать видимость деталей:
<div ng-repeat="val in mainList" id={{val.name}} class="mainPopup" ng-show="val == selected" ng-style="myObj"></div>