Пересвязать модели сервисного объекта

0

У меня есть представление, которое содержит ng-модель, которая сначала связывает нулевой служебный объект. Поскольку объект является нулевым, ng-модель не связывается с этим значением, даже когда это значение доступно. Есть ли способ, чтобы я мог перестроить ng-model на доступное значение. Я не хочу использовать ng-change, поскольку ng-change просто вызывает одностороннюю привязку. Вот плункер.

http://plnkr.co/edit/4jILPHJy2P6ueIaJSlNl?p=preview

В плункерере есть служба myService в formController. И в html я связываю ng-модель с переменной внутри службы myService.name.

<input type="text" class="form-control" name="name" ng-model="myService.name">

Я хочу сделать это, когда я нажимаю кнопку, так как имя службы инициализируется, поэтому я могу привязать ng-модель к переменной сервиса.

Теги:
angular-ngmodel

2 ответа

1
Лучший ответ

В вашем исходном коде myService не входит в $ scope ng-контроллера. Таким образом, даже вы привязываете входные данные с помощью myService.name, ng-модель - это не myService, которую вы создали.

Вы должны назначить myService для $ scope, как показано ниже, чтобы заставить ваш код работать.

var formApp = angular.module('formApp', [])


.service('myService',function(){
   this.name='hello';
})

.controller('formController', function($scope,myService) {

    // we will store our form data in this object
    $scope.formData = {};
    $scope.myService = myService;
    $scope.click=function(){
      myService.name='test';
    }

});

Но я рекомендую вам создать локальную переменную в $ scope и присвоить ей значение в сервисе, а не получить весь объект службы. В этом и заключается всякая служба обслуживания, чтобы обеспечить какой-то "сервис".

  • 0
    Спасибо за ответ. Но, похоже, это работает только путем передачи всего объекта. Если код выглядит следующим образом: $ scope.myService.name = myService.name; Тогда это не сработало.
  • 1
    Я думаю, что Ян Чжан имел в виду только $scope.name = myService.name , с ng-model="name" в вашем входном теге.
Показать ещё 2 комментария
0

Другим вариантом может быть: наличие функции Init в вашей службе и передача вашей области в вашу службу. Затем вызовите функцию init в верхней части вашего контроллера. Что-то вроде вашего обслуживания:

Init: function(scope){
      scope.myService = this;
}

Затем в вашем контроллере:

.controller('formController', function($scope,myService) {    
     myService.Init($scope);    
});

Теперь вы сможете использовать:

<input type="text" class="form-control" name="name" ng-model="myService.name">

Ещё вопросы

Сообщество Overcoder
Наверх
Меню