Контроллер Angular $ routeprovider не работает

Я слежу за документами так внимательно, как только могу, но не могу понять, почему это не работает. Я пытался использовать controllerAs вместо использования $parent, когда мне нужно выйти из контроллера, но если я не могу понять это, мне придется придерживаться его. Маршрут:

.when('/user/:id', {
    templateUrl: 'views/user.html',
    access: { requiredLogin: true },
    controller: 'UserCtrl',
    controllerAs: 'dr'

Вид:

<input type="text" class="form-control" id="last-name" placeholder="Last Name" ng-model="dr.formData.last_name">

Если я удалю Др. и делать

<input type="text" class="form-control" id="last-name" placeholder="Last Name" ng-model="formData.last_name">

Это работает нормально.

Изменить: по запросу здесь контроллер:

angular.module('angularWebappSeedApp')
  .controller('UserCtrl', function ($scope,$routeParams,$http, API_URL) {

    $scope.userId = $routeParams.id;
   $scope.formData = {}; 

   $scope.activeTab = 0;

    var init = function(){
        $http.get(API_URL+'/admin/users/'+$scope.userId).then(function(response) {
            $scope.formData = response.data;
        });
    };

    init();
  });

person Z2VvZ3Vp    schedule 08.05.2015    source источник
comment
не могли бы вы также добавить код контроллера ..   -  person Pankaj Parkar    schedule 08.05.2015
comment
Что именно не работает? Есть ли ошибка?   -  person Oleg    schedule 08.05.2015
comment
это выглядит так, как будто оно должно работать, но есть ли у вашего контроллера какие-либо данные?   -  person Claies    schedule 08.05.2015
comment
@Oleg нет, значение не отображается в представлении, пока я не удалю dr.   -  person Z2VvZ3Vp    schedule 08.05.2015
comment
@Claies да, если я удалю файл dr. это работает нормально.   -  person Z2VvZ3Vp    schedule 08.05.2015
comment
хорошо, formData является свойством вашего контроллера или свойством $scope? звучит так, как будто это значение $scope... мы не можем сказать вам намного больше, не видя кода вашего контроллера.   -  person Claies    schedule 08.05.2015
comment
ну вот, вы не используете синтаксис ControllerAs в своем контроллере.   -  person Claies    schedule 08.05.2015
comment
Я думаю, что это отвечает на вопрос, тогда @Claies Спасибо.   -  person Z2VvZ3Vp    schedule 08.05.2015


Ответы (1)


Синтаксис ControllerAs для Angular позволяет вам избежать прямого подключения к $scope, используя псевдоним вашего контроллера как свойство на $scope.

т.е. при использовании controllerAs: 'dr' вы получите свойство $scope.dr. Внутри контроллера вы можете сопоставить другие свои свойства непосредственно с экземпляром контроллера, а не с $scope. Например:

angular.module('angularWebappSeedApp')
  .controller('UserCtrl', function ($routeParams,$http, API_URL) {
    //no need to inject $scope here

    var self = this; //create an alias to avoid closure issues

   self.userId = $routeParams.id;
   self.formData = {};
   ...

Теперь в вашем HTML вы по-прежнему можете получить доступ к этим значениям, даже если вы никогда не вводили $scope, потому что dr является свойством $scope.

ng-model="dr.formData.last_name"
person Claies    schedule 08.05.2015
comment
Спасибо, есть о чем подумать, изучая все угловые вещи, и эта деталь была потеряна для меня. Это очень помогает мне понять. - person Z2VvZ3Vp; 08.05.2015