У меня есть представление, которое содержит 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-модель к переменной сервиса.
В вашем исходном коде 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 и присвоить ей значение в сервисе, а не получить весь объект службы. В этом и заключается всякая служба обслуживания, чтобы обеспечить какой-то "сервис".
Другим вариантом может быть: наличие функции 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">
$scope.name = myService.name
, сng-model="name"
в вашем входном теге.