2014-12-20 2 views
0

Я много исследовал в вопросах переполнения стека, но безрезультатно. Я пробовал очень простой сценарий для двухсторонней привязки между 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. Я продолжаю получать «тест» как значение для пользователя и пароля.

+0

Ваш 'loginController' устанавливает' $ scope.answer' сразу после создания 'loginController'. Вы уверены, что когда 'loginController' получает экземпляр, что учетные данные для входа уже обновлены? –

+0

Контроллер входа вызывается только после отправки формы. Поэтому нет способа вызвать его до изменения текстового поля. –

ответ

0

Разве вы не должны просто делать angular.module один раз в своем приложении. Я вижу, что его повторяют везде?

Также, поскольку вы используете завод, его следует вводить в оба контроллера, если вы хотите сохранить значение на потоке. Завод будет синглом и работает.

+0

Я не уверен, как его вводить в контроллер входа, поскольку мне не нужно это значение, пока пользователь не отправит форму. Я думаю, моя проблема в том, что я даже не уверен, что это правильный способ сделать это. Мне просто нужно отправить значения формы для обслуживания и загрузки страницы потребителей. Есть лучший способ сделать это? –

Смежные вопросы