2015-04-03 14 views
10

Senza entrare nei dettagli del motivo, ho bisogno di fornire un alias per $scope nei miei controller. Invece di iniettare e decorare $scope mi piacerebbe che gli utenti potessero invece iniettare view e avere lo stesso effetto.

In base alla mia comprensione dell'angolare, $scope viene creato da un $scopeProvider che è una fabbrica registrata al momento della configurazione dell'app angolare. Suppongo di dover registrare uno viewProvider e impostarlo uguale allo $scopeProvider ma non ho avuto fortuna con quello che ho provato. Qualche idea?

FYI: Non sto cercando qualcosa come ['$scope', function(view){..., la soluzione ideale funzionerebbe con ['view', function(view){.... L'oggetto vista agirebbe esattamente come$scope, legame a due vie, ecc

+1

Utilizzando quell'alias vuoi le stesse cose come il bind a due vie come $ scope? – Samir

+0

Sì. Voglio lo stesso effetto di avere 'var view = $ scope' – Arbiter

+0

Espandi al motivo per cui vuoi prendere in giro un servizio passivo. Posso capire che sto prendendo in giro un servizio attivo come http che arriva fuori dalla tua sandbox. Ma il servizio di esplorazione è solo un contenitore per ciò che si memorizza al suo interno e dovrebbe essere utilizzato allo stesso modo nei test delle unità di misura come nella produzione. –

risposta

0

Sono stato in grado di risolverlo nella sezione di configurazione della mia app. Nei miei controller ora posso usare $scope o view e avranno lo stesso significato.

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

ma alla fine si sta iniettando '$ scope' all'interno dell'oggetto' view' –

+0

Sto anche iniettando $ scope in modo da poter usare "$ scope" o "view" per riferirsi all'oggetto scope. Questo è esattamente ciò che volevo fare, avere la mia vera definizione del controller usare "view" invece di "$ scope" e fare in modo che significhi la stessa cosa. – Arbiter

+0

quindi la tua domanda ti chiede qualcosa e vuoi qualcos'altro –

2

Non c'è una tale cosa come $scopeProvider, gli ambiti vengono creati utilizzando il metodo $new, ogni campo di applicazione ha accesso a questo metodo per eredità (delega a sii preciso). Quando si richiede uno $scope in un controller, lo $scope viene creato dinamicamente utilizzando il suo metodo principale $scope$new e immesso sotto tale nome. Per invocare il comportamento di cui sopra per un nome diverso dovresti giocare con interni angolari.

+0

Grazie, qualche idea di come sarebbe fatto allora? – Arbiter

10

Se insegni AngularJS, si dovrebbe effettivamente evitare di utilizzare $scope e utilizzare controller as syntax-See this awesome Angular Style Guide by John Papa for explanation.

Ciò risolverebbe anche il tuo problema :)

+0

Molto utile, lo leggerò. Grazie! – Arbiter

+0

@Arbiter Siete i benvenuti :) Fatemi sapere se avete bisogno di ulteriore aiuto. –

Problemi correlati