2015-04-03 4 views
10

Ohne in die Details warum, muss ich einen Alias ​​für $scope in meinen Controllern bereitstellen. Anstatt zu injizieren und dekorieren $scope möchte ich für die Benutzer stattdessen in der Lage sein, view zu injizieren und haben es den gleichen Effekt.

Basierend auf meinem Verständnis von Winkel, $scope wird durch eine $scopeProvider erstellt, die eine Fabrik zur Konfigurationszeit der eckigen App registriert ist. Ich gehe davon aus, dass ich eine viewProvider registrieren und gleich der $scopeProvider setzen muss, aber ich hatte nicht Glück mit dem, was ich versucht habe. Irgendwelche Ideen?

FYI: Ich bin nicht auf der Suche nach etwas wie ['$scope', function(view){..., würde die ideale Lösung mit ['view', function(view){... arbeiten. Die Ansicht Objekt würde handeln genau wie $scope, Zwei-Wege-Bindung usw.

+1

Mit diesem Alias ​​lösen würden Sie tut gleiche Dinge wie zwei Art und Weise verbindlich wie $ Umfang wollen? – Samir

+0

Ja. Ich möchte den gleichen Effekt wie 'var view = $ scope' haben. – Arbiter

+0

Erweitern Sie auf Grund, dass Sie einen passiven Dienst verspotten möchten. Ich kann verstehen, spöttisch ist ein aktiver Dienst wie http, die außerhalb Ihrer Sandbox erreicht. Aber der Scope-Service ist nur ein Container für das, was Sie darin aufbewahren und sollte genauso wie in der Produktion in den Unit-Unit-Tests verwendet werden. –

Antwort

0

Ich konnte es in der App Konfiguration Abschnitt zu lösen. In meinen Controllern kann ich nun $scope oder view verwenden und sie haben die gleiche Bedeutung.

$routeProvider 
    .when('/Index', { 
     templateUrl: "/views/index.html", 
     controller: ['$scope', '$controller', function($scope, $controller){ 
      $controller("IndexController", {$scope:$scope, view: $scope}); 
     }] 
    }) 
+0

aber schließlich injizierst du '$ scope' in dein' view' Objekt –

+0

Ich injiziere auch $ scope, so dass du entweder "$ scope" oder "view" verwenden kannst, um auf das Scope-Objekt zu verweisen. Dies ist genau das, was ich tun wollte, habe meine echte Controller-Definition "view" anstelle von "$ scope" verwendet und es bedeutet dasselbe. – Arbiter

+0

dann fragt Ihre Frage etwas und Sie wollen etwas anderes –

2

Es gibt nicht so etwas wie $scopeProvider, Bereiche geschaffen werden, die $new Methode hat jeder Umfang Zugriff auf diese Methode durch Vererbung (Delegation sei genau). Wenn Sie in einem Controller nach einem $scope fragen, wird der $scope dynamisch unter Verwendung seiner übergeordneten $scope$new Methode erstellt und unter diesem Namen eingefügt. Um das oben erwähnte Verhalten für einen anderen Namen aufzurufen, müßte man mit kantigen Einbauten spielen.

+0

Danke, irgendeine Idee, wie das dann gemacht würde? – Arbiter

10

Wenn Sie AngularJS unterrichten, sollten Sie vermeiden, tatsächlich $scope und controller as syntax verwenden mit - See this awesome Angular Style Guide by John Papa for explanation.

das auch Ihr Problem :)

+0

Das ist sehr hilfreich, ich werde es lesen. Vielen Dank! – Arbiter

+0

@Arbiter Sie sind willkommen :) Lassen Sie mich wissen, wenn Sie weitere Hilfe benötigen. –

Verwandte Themen