2015-04-01 14 views
11

ui-Router Stan:ui-router z ControllerAs wiążących

$stateProvider 
    .state('dashboard', { 
     url: '/dashboard', 
     templateUrl: 'app/dashboard/dashboard.html', 
     controller: 'DashboardController as vm' 
    }); 

W DashboardController mam:

var vm = this; 
vm.title = 'Dashboard'; 

A w szablonie dashboard.html:

{{vm.title}} 

Dlaczego wynik pokazuje "{{vm.title}}" zamiast powiązania z jego wartością w kontrolerze?

+0

Jeśli chcesz go powiązać w widoku, użyj opcji $ scope –

+0

Musisz dodać vm do zakresu, aby udostępnić go w widoku. $ scope.vm = {title: 'Dashboard'}; – thsorens

+0

$ scope umrze w nowych wersjach Angular :( – Oswaldo

Odpowiedz

21

Istnieje ustawienie kontrolera, gdy konfigurujesz stan.

$stateProvider 
    .state('dashboard', { 
     url: '/dashboard', 
     templateUrl: 'app/dashboard/dashboard.html', 
     controller: 'DashboardController', 
     controllerAs: 'vm' 
    }); 

https://github.com/angular-ui/ui-router/wiki

+1

Próbowałem twojego kodu, ale nie działało, domyślam się, że kontroler jest taki sam jak kontroler: 'DashboardController jako ...' – Oswaldo

+1

Tak - wygląda na to, że możesz użyć obu metod, więc jest to coś innego. Czy możesz opublikować pełny szablon zamiast tylko linii wiążącej? –

+0

Linia wiążąca to mój pełny kod szablonu na teraz, używając do testu – Oswaldo

1

W swojej controller function, trzeba będzie return this; po zakończeniu funkcji.

var vm = this; 
vm.title = 'Dashboard'; 
// 
return vm; 

Jeśli pracujemy z $ zakresu zamiast vm = this;:

$scope.title = 'Dashboard'; 
// 
return $scope; 

powodzenia.