2017-10-05 2 views
0

Ich habe eine Liste, die eine ng-Wiederholung details hat.
Wenn ich über einen der li schweben, möchte ich die div namens background, die außerhalb der ng-Wiederholung liegt, um es auf die details 's URL zu ändern.Element außerhalb Zugriff auf Daten in einem externen ng-repeat

Aber ich weiß nicht, wie das äußere Element auf die Daten der ng-Wiederholung zugreifen kann.

plunkr: https://plnkr.co/edit/lGRfE9YGYN645Ztpr94K?p=preview

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope) { 

    $scope.details = [ 
    { "name": "Employees", "url":"https://i.pinimg.com/736x/76/47/9d/76479dd91dc55c2768ddccfc30a4fbf5--pikachu-halloween-costume-diy-halloween-costumes.jpg" }, 
    { "name": "Support", "url":"https://i.pinimg.com/736x/76/47/9d/76479dd91dc55c2768ddccfc30a4fbf5--pikachu-halloween-costume-diy-halloween-costumes.jpg" } 
    ]; 

}); 

HTML:

<!DOCTYPE html> 
<html ng-app="plunker"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.8/angular.min.js" data-semver="1.0.8"></script> 
    <script src="app.js"></script> 
    </head> 

    <body ng-controller="MainCtrl"> 
    <div class="background"> 
    <ul ng-repeat="detail in details"> 
    <li>{{detail.name}} 

    </li> 
    </ul> 
    </div> 
    </body> 

</html> 
+0

Verwenden 'ng-mouseenter' und' ng-mouseleave' auf schweben. Setzen Sie eine Variable auf wahr/falsch und verwenden Sie diese Variable in 'ng-class', um Ihre benutzerdefinierte Klasse hinzuzufügen. –

+0

Problem verwendet nicht diese, ich weiß nicht, wie man auf die ng-Repeat-Elemente zugreifen kann. – Snorlax

+0

Diese Variable ist über den gesamten Controller-Bereich zugänglich. –

Antwort

1

können Sie ng-mouseover auf li Artikel verwenden und den Hintergrund anwenden mit ng-style der über div

<div ng-style="{'background-image':'url(' + bgUrl + ')'}"> 

DEMO

var app = angular.module('plunker', []); 
 

 
app.controller('MainCtrl', function($scope) { 
 

 
    $scope.details = [ 
 
    { "name": "Employees", "url":"https://i.pinimg.com/736x/76/47/9d/76479dd91dc55c2768ddccfc30a4fbf5--pikachu-halloween-costume-diy-halloween-costumes.jpg" }, 
 
    { "name": "Support", "url":"http://i.stack.imgur.com/IosVb.png" } 
 
    ]; 
 
    $scope.applybackground=function(detail){ 
 
     $scope.bgUrl = detail.url; 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<!DOCTYPE html> 
 
<html ng-app="plunker"> 
 
<head> 
 
    <meta charset="utf-8" /> 
 
    <title>AngularJS Plunker</title> 
 
    <link rel="stylesheet" href="style.css" /> 
 
</head> 
 
<body ng-controller="MainCtrl"> 
 
    <div ng-style="{'background-image':'url(' + bgUrl + ')'}"> 
 
    <ul ng-repeat="detail in details"> 
 
     <li ng-mouseenter="applybackground(detail)">{{detail.name}} 
 
     </li> 
 
</ul> 
 
</div> 
 
</body> 
 

 
</html>

0

Sie können ng-Mouseover verwenden, um das Detail-Objekt in der Steuerung zuzugreifen.

<body ng-controller="MainCtrl"> 
    <div class="background" ng-style="{'background-image':'url({{myBackgroundUrl}})'}"> 
    <ul ng-repeat="detail in details"> 
     <li ng-mouseover="onHover(detail)">{{detail.name}}</li> 
    </ul> 
    </div> 
</body> 

Am Controller:

$scope.myBackgroundUrl = ''; 
$scope.onHover = function(detail) { 
    console.log(detail.url) 
    $scope.myBackgroundUrl = detail.url; 
} 
0

Verwendung ng-Mouseover so etwas wie

<div class="background" style="background-image:url('{{backGroundUrl}}')"> 
<ul > 
    <li ng-mouseover="change(detail.url)" ng-repeat="detail in details"> 
     {{detail.name}} 

    </li> 

    $scope.change= function(url){ 
     $scope.backGroundUrl=url; 
    } 

Here is working example

Verwandte Themen