2016-06-21 4 views
0

Ich habe eine Funktion, die eine URL generiert. Ich möchte es innerhalb von ng-href verwenden. Das ist alles in Ordnung, bis ich die Methode außerhalb von $scope verschieben musste. Das geht nicht mehr.Was ist der richtige Weg, Funktion außerhalb des Umfangs in eckigen zu nennen?

dieses Plunker Beispiel Siehe:

EDIT New Plunker Beispiel mit Kommentaren:

https://plnkr.co/edit/z4txeXD1J2PJCfcBNw5C?p=preview

Old Link: https://plnkr.co/edit/qb9w6A5nCNet2MCynnGH?p=preview

ich es bekommen kann mit einigen Hacks zu arbeiten B. die Methode in den Root-Bereich zu setzen (wie im Beispiel), aber das ist wirklich unhandlich. Gibt es einen besseren Weg, Methoden in den Anwendungsbereich zu "importieren"?

+0

, was Sie meinen Sie mit „Ich hatte die Methode außerhalb von' $ scope' zu ​​bewegen Das fühlt sich an wie ein XY Problem, weder Ihre Frage oder die verknüpfte Code, den Sie wirklich zur Verfügung gestellt wird beschrieben, was Sie zu tun versuchen; Sie zeigen Ihnen einige mögliche "Fixes" für ein unbestimmtes Problem, und keine der Fixes sind empfohlene Möglichkeiten, mit Winkel überhaupt umzugehen. – Claies

+0

Ihr Plunk verweist auf eine script.js-Datei, die Sie nicht in Ihrem Plunk – jbrown

+0

@Claies enthalten hm ... sorry, ich war unklar ... In der PLNKR-Verknüpfung war '$ scope.getUrlInScope' meine Methode, es funktionierte. Jetzt möchte ich diese Methode nach außerhalb des Controllers verschieben (wie in, ich möchte verschiebe es zu "getUrlGlobalScope"). Mein zweites '' tag d stellt fest, dass die 'ng-href' nach dem Verschieben der Funktion nicht mehr funktionieren würde, indem nur der Funktionsname geändert wird (wie erwartet). Die 3. und 4. "" sind Wege, die ich fand, dass funktioniert, aber ich fühle mich wie sie sind nicht ideal, weshalb ich diese Frage stelle. – user3759055

Antwort

1

Sie könnten eine directive erstellen, die die URL Generation tut und schafft eine ng-href für die Variablen

+0

Ich dachte darüber nach, aber es scheint eine große Änderung des Codes zu sein, wenn ich einfach etwas Einfaches brauche. – user3759055

0

Warum nicht einfach im $ Fenster passieren (oder sogar einen Anker <a> erzeugt), die Sie von außen benötigen, und stattdessen nur verwenden $ scope wie normalerweise in angular innerhalb der ng-href? ng = "{}" mit den einzelnen geschweiften Klammern in Winkel bezieht sich auf Ausdrücke. ?

<a ng-href="query">$scope.query</a> 
    </div> 
    <script> 
    function getUrlGlobalScope(q) { 
     return 'some_url_global?q=' + q; 
    } 

    (function(angular) { 
     'use strict'; 
    angular.module('myApp', []) 
     .run(function($rootScope) { 
     $rootScope.getUrlRootScope = getUrlGlobalScope; 
     }) 
     .controller('MyController', ['$scope','$window', function($scope,$window) { 
     $scope.getUrlInScope = function(q) { return 'some_url?q=' + q; } 


     $scope.query = 'query'; 
Verwandte Themen