2017-10-18 104 views
0

我想通过(我认为)两个孩子控制器之间的数据。 试图与工厂做到这一点。如何在工厂之间传递控制器之间的值?

testFactory.js

  app= angular.module('testApp'); 
      app.factory('values', [function() { 

    var testValues= { 
     valueA: '' 
    }; 

    return { 
     setValueA: function(a) { 
      testValues.valueA= a; 
     }, 
     getValueA: function() { 
      return testValues.valueA; 
     } 
    }; 
}]); 

在不同JS文件,以便不同的控制器。 controller1.js(这一项设置的值)

angular.module('testApp') 
    .controller('firstCtrl', ['$scope''values', 
     function ($scope, values) { 

     values.setValueA("MyTestValue"); 

}]); 

controller2.js此读取值。

angular.module('testApp') 
    .controller('secondCtrl', [ '$scope', 'values', 
     function ($scope, values) { 

     $scope.valueA = values.getValueA(); 

}]); 

我在HTML端包含js。两个控制器都看到工厂(我可以在调试过程中看到这些功能)。我的问题是第二个没有任何价值。就像它的一种全新的方法。不知道我错过了什么?

+0

无法保证'firstCtrl'在初始化'secondCtrl'时完全初始化,所以'firstCtrl'中设置的值可能不会被设置。最简单的(尽管可能不是最好的方式)让这些值同步是在'values.getValueA();' – laughingpine

+0

上使用'$ scope。$ watch'然而试图在firstCtrl和secondCtrl中注入服务(从工厂返回)? – Andrea

回答

0
The code Looks fine. I made a sample to replicate the same. working code is below 



<!DOCTYPE html> 
<html ng-app="myapp"> 

    <head> 
    <meta charset="utf-8" /> 
    <title>AngularJS Plunker</title> 
    <script>document.write('<base href="' + document.location + '" />');</script> 
    <link rel="stylesheet" href="style.css" /> 
    <script data-require="[email protected]" src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.11/angular.min.js" data-semver="1.5.11"></script> 
    <script src="app.js"></script> 
    </head> 

    <body > 
    <div> 
     <h1>Services</h1> 
     <div ng-controller="secondCtrl as list"> 
     <p ng-repeat="value in list.values">{{ value.valueA }}</p> 
     </div> 

     <div ng-controller="firstCtrl as post"> 
     <form ng-submit="post.addValue(post.newValue)"> 
      <input type="text" ng-model="post.newValue"> 
      <button type="submit">Add Message</button> 
     </form> 
     </div> 
    </div> 
    </body> 
</html> 




    var app = angular.module('myapp', []); 

    app.factory('values', function(){ 

     var values = {}; 
     values.list = []; 
     values.list.push({valueA: 'hellomessage'}); 
     values.add = function(message){ 
      values.list.push({valueA: message}); 
     }; 

     return values; 
    }); 

    app.controller('firstCtrl', function (values){ 
     var self = this; 
     self.newValue = 'First Value'; 
     self.addValue = function(value){ 

     values.add(value); 
     self.newValue = ''; 
     }; 

    }); 

    app.controller('secondCtrl', function (values){ 
     var self = this; 

     self.values = values.list; 
    }); 
+0

我不怀疑这个作品。我的问题似乎是当我将它分割成不同的文件时,它会丢失。 first.html通过脚本标签链接到工厂。 second.html也必须通过脚本标记链接到工厂。每个控制器似乎都将工厂初始化为新的。 不知道如何调用工厂,所以它不会每次都被初始化。 –

相关问题