Я много исследовал в вопросах переполнения стека, но безрезультатно. Я пробовал очень простой сценарий для двухсторонней привязки между ng-model и Factory, так как мне нужно использовать это значение для контроллеров, но всякий раз, когда я пытаюсь прочитать объект Factory во втором контроллере, я продолжаю получать значение по умолчанию, а не обновленное значение текстового поля.Угловая JS - 2-сторонняя привязка не работает при использовании Factory binding с ng-model
Это код фрагмента. Любая помощь будет принята с благодарностью.
index.html
<body>
<div ng-view></div>
<script src="https://code.angularjs.org/1.2.16/angular.min.js"></script>
<script src="https://code.angularjs.org/1.2.16/angular-route.min.js"></script>
<script src="app.js" ></script>
<script src="controllers.js" ></script>
<script src="services.js" ></script>
</body>
app.js
var DealsApp = angular.module('DealsApp', ['ngRoute','DealsControllers','DealsServices']);
DealsApp.config(function($routeProvider) {
$routeProvider
.when('/', {
templateUrl: 'partials/login.html',
controller: 'homeController'
})
.when('/consumer', {
templateUrl: 'partials/consumer.html',
controller: 'loginController'
})
.otherwise({
redirectTo: '/404'
});
});
controller.js
/**
* Created by vijaykumar on 12/15/2014.
*/
var DealsControllers = angular.module('DealsControllers',[]);
DealsControllers.controller('homeController',function($scope,loginCredentials) {
$scope.login = loginCredentials
});
DealsControllers.controller('loginController',function($scope,loginService,loginCredentials) {
$scope.answer = loginService.userCheck(loginCredentials.user,loginCredentials.password)
});
services.js
/**
* Created by vijaykumar on 12/16/2014.
*/
var DealsServices = angular.module('DealsServices',[]);
DealsServices.factory('loginService', function(){
var fac = {};
fac.userCheck = function(usr, pwd) {
var prodHTML ="You are in producers home page"
var consHTML ="You are in producers home page"
var invalidHTML ="username and password is invalid"
if(usr == 'producer' && pwd == 'producer')
return prodHTML
else if(usr == 'consumer' && pwd == 'consumer')
return consHTML
else
return invalidHTML
}
return fac;
});
DealsServices.factory('loginCredentials',function(){
return{
user: "test",
password: "test"
};
});
Я не могу прочитать обновленное значение при попытке назначить его scope.answer в loginController. Я продолжаю получать «тест» как значение для пользователя и пароля.
Ваш 'loginController' устанавливает' $ scope.answer' сразу после создания 'loginController'. Вы уверены, что когда 'loginController' получает экземпляр, что учетные данные для входа уже обновлены? –
Контроллер входа вызывается только после отправки формы. Поэтому нет способа вызвать его до изменения текстового поля. –