it-swarm.com.de

Wie und wann ng-click verwenden, um eine Route aufzurufen?

Angenommen, Sie verwenden Routen:

// bootstrap
myApp.config(['$routeProvider', '$locationProvider', function ($routeProvider, $locationProvider) {

    $routeProvider.when('/home', {
        templateUrl: 'partials/home.html',
        controller: 'HomeCtrl'
    });
    $routeProvider.when('/about', {
        templateUrl: 'partials/about.html',
        controller: 'AboutCtrl'
    });
...

Und in Ihrer HTML-Datei möchten Sie beim Klicken auf eine Schaltfläche zur Info-Seite navigieren. Ein Weg wäre 

<a href="#/about">

... aber ng-click scheint auch hier nützlich zu sein.

  1. Ist diese Annahme richtig? Dass ng-click anstelle von Anker verwendet werden?
  2. Wenn ja, wie würde das funktionieren? IE: 

<div ng-click="/about">

242

Routen überwachen den $location-Dienst und reagieren auf Änderungen in der URL (normalerweise über den Hash). Um eine Route zu "aktivieren", ändern Sie einfach die URL. Am einfachsten geht das mit Ankertags.

<a href="#/home">Go Home</a>
<a href="#/about">Go to About</a>

Es ist nichts komplizierteres erforderlich. Wenn Sie dies jedoch über den Code tun müssen, verwenden Sie den $location-Dienst:

$scope.go = function ( path ) {
  $location.path( path );
};

Was zum Beispiel ein Button auslösen könnte:

<button ng-click="go('/home')"></button>
428

Hier ist ein guter Tipp, den niemand erwähnt hat. In dem Controller, in dem sich die Funktion befindet, müssen Sie den Standortanbieter angeben:

app.controller('SlideController', ['$scope', '$location',function($scope, $location){ 
$scope.goNext = function (hash) { 
$location.path(hash);
 }

;]);

 <!--the code to call it from within the partial:---> <div ng-click='goNext("/page2")'>next page</div>
81
sean

Die Verwendung eines benutzerdefinierten Attributs (mit einer Direktive implementiert) ist möglicherweise der sauberste Weg. Hier ist meine Version, basierend auf den Vorschlägen von @Josh und @sean.

angular.module('mymodule', [])

// Click to navigate
// similar to <a href="#/partial"> but hash is not required, 
// e.g. <div click-link="/partial">
.directive('clickLink', ['$location', function($location) {
    return {
        link: function(scope, element, attrs) {
            element.on('click', function() {
                scope.$apply(function() {
                    $location.path(attrs.clickLink);
                });
            });
        }
    }
}]);

Es hat einige nützliche Funktionen, aber ich bin neu in Angular, also gibt es wahrscheinlich noch Verbesserungsbedarf.

33
Bennett McElwee

Denken Sie daran, dass Sie bei Verwendung von "ng-click" für das Routing nicht mit der rechten Maustaste auf das Element klicken und "In neuem Tab öffnen" oder die Strg-Taste auf den Link klicken können. Ich versuche, ng-href zu verwenden, wenn es um die Navigation geht. Ng-Click ist besser für Schaltflächen oder für visuelle Effekte (z. B. Ausblenden) zu verwenden. Aber Über .__ würde ich nicht empfehlen. Wenn Sie die Route ändern, müssen Sie möglicherweise eine Menge in der Anwendung platzieren. Haben Sie eine Methode, die den Link zurückgibt. zB: Über. Diese Methode legen Sie in ein Dienstprogramm

4
Jens Alenius

Eine andere Lösung ohne ng-click, die auch für andere Tags als <a> noch funktioniert:

<tr [routerLink]="['/about']">

Auf diese Weise können Sie auch Parameter an Ihre Route übergeben: https://stackoverflow.com/a/40045556/838494

(Dies ist mein erster Tag mit Winkel. Sanftes Feedback ist willkommen)

1
Albert Hendriks

Ich habe die Direktive ng-click verwendet, um eine Funktion aufzurufen, während ich route templateUrl anforderte, um zu entscheiden, welcher <div> auf der Seite route templateUrl oder in verschiedenen Szenarien show oder hide sein muss.

AngularJS 1.6.9

Sehen wir uns ein Beispiel an, wenn ich auf der Routing-Seite entweder den add <div> oder den edit <div> benötige, den ich mit den übergeordneten Controllermodellen $scope.addProduct und $scope.editProduct boolean steuere.

RoutingTesting.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Testing</title>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular-route.min.js"></script>
    <script>
        var app = angular.module("MyApp", ["ngRoute"]);

        app.config(function($routeProvider){
            $routeProvider
                .when("/TestingPage", {
                    templateUrl: "TestingPage.html"
                });
        });

        app.controller("HomeController", function($scope, $location){

            $scope.init = function(){
                $scope.addProduct = false;
                $scope.editProduct = false;
            }

            $scope.productOperation = function(operationType, productId){
                $scope.addProduct = false;
                $scope.editProduct = false;

                if(operationType === "add"){
                    $scope.addProduct = true;
                    console.log("Add productOperation requested...");
                }else if(operationType === "edit"){
                    $scope.editProduct = true;
                    console.log("Edit productOperation requested : " + productId);
                }

                //*************** VERY IMPORTANT NOTE ***************
                //comment this $location.path("..."); line, when using <a> anchor tags,
                //only useful when <a> below given are commented, and using <input> controls
                $location.path("TestingPage");
            };

        });
    </script>
</head>
<body ng-app="MyApp" ng-controller="HomeController">

    <div ng-init="init()">

        <!-- Either use <a>anchor tag or input type=button -->

        <!--<a href="#!TestingPage" ng-click="productOperation('add', -1)">Add Product</a>-->
        <!--<br><br>-->
        <!--<a href="#!TestingPage" ng-click="productOperation('edit', 10)">Edit Product</a>-->

        <input type="button" ng-click="productOperation('add', -1)" value="Add Product"/>
        <br><br>
        <input type="button" ng-click="productOperation('edit', 10)" value="Edit Product"/>
        <pre>addProduct : {{addProduct}}</pre>
        <pre>editProduct : {{editProduct}}</pre>
        <ng-view></ng-view>

    </div>

</body>
</html>

TestingPage.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .productOperation{
            position:fixed;
            top: 50%;
            left: 50%;
            width:30em;
            height:18em;
            margin-left: -15em; /*set to a negative number 1/2 of your width*/
            margin-top: -9em; /*set to a negative number 1/2 of your height*/
            border: 1px solid #ccc;
            background: yellow;
        }
    </style>
</head>
<body>

<div class="productOperation" >

    <div ng-show="addProduct">
        <h2 >Add Product enabled</h2>
    </div>

    <div ng-show="editProduct">
        <h2>Edit Product enabled</h2>
    </div>

</div>

</body>
</html>

beide Seiten - RoutingTesting.html (übergeordnet), TestingPage.html (Routing-Seite) befinden sich im selben Verzeichnis,

Hoffe das wird jemandem helfen.

1
ArifMustafa

Sie können verwenden:

<a ng-href="#/about">About</a>

Wenn Sie eine dynamische Variable in href möchten, können Sie dies folgendermaßen tun:

<a ng-href="{{link + 123}}">Link to 123</a>

Wobei link Winkelvariable ist.

0
Sohail xIN3N

tun Sie es einfach wie folgtin Ihrer HTML schreiben:

<button ng-click="going()">goto</button>

Fügen Sie in Ihrem Controller $ state wie folgt hinzu: 

.controller('homeCTRL', function($scope, **$state**) {

$scope.going = function(){

$state.go('your route');

}

})
0
LucasMugi