在Angularjs中控制器之间共享数据尚不清楚

时间:2016-05-19 12:23:40

标签: angularjs angular-services

我创建了一个公共服务来在控制器之间共享数据。

以下是代码段。

这里使用setter和getter时未定义。在直接访问对象时获取值。如何使用getter和setter获取值。

幕后发生的事情。



// JavaScript source code

(function () {
    'use strict';

    angular.module('app',[])
    
})();


(function () {
    'use strict';

    angular
      .module('app')
      .factory('appcontext', appContext);

    function appContext() {
        var service = {            
            getStartDate: getStartDate,         
          setStartTime : setStartTime,
            startTime : startTime
           
        };

        return service;

        //private variables       

        var startTime = '';
      

        function setStartTime(startTime) {
            startTime = startTime;
        }

        function getStartDate() {
            return startTime;
        }      
        
    }
})();


(function () {
    'use strict';

    angular.module('app')
           .controller("InsController", InsController)

    InsController.$inject = ['appcontext'];

    function InsController(appcontext) {

        appcontext.setStartTime(new Date());

        console.log(appcontext.getStartDate()); // undefined

        appcontext.startTime = new Date();

        console.log(appcontext.startTime); //prints the date correctly

    }          


})();

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
  
  <div ng-controller= "InsController">
    
    <div>{{ }}</div>
    
    </div>
  
  </html>
&#13;
&#13;
&#13;

4 个答案:

答案 0 :(得分:0)

只需返回您要公开的功能。既然你有getter和setter函数,那么不要自己返回变量,这对你的帮助不大。创建一个变量service,它存储您需要的所有内部内容,并且您的函数应该使用它。

&#13;
&#13;
// JavaScript source code

(function () {
    'use strict';

    angular.module('app',[])
    
})();


(function () {
    'use strict';

    angular
      .module('app')
      .factory('appcontext', appContext);

    function appContext() {
        var service = this;
        return {           
            getStartDate: getStartDate,         
            setStartTime : setStartTime          
        };

        //private variables       

        service.startTime = '';
      

        function setStartTime(startTime) {
            service.startTime = startTime;
        }

        function getStartDate() {
            return service.startTime;
        }      
        
    }
})();


(function () {
    'use strict';

    angular.module('app')
           .controller("InsController", InsController)

    InsController.$inject = ['appcontext'];

    function InsController(appcontext) {

        appcontext.setStartTime(new Date());

        console.log(appcontext.getStartDate()); // undefined

    }          


})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
  
  <div ng-controller= "InsController">
    
    <div>{{ }}</div>
    
    </div>
  
  </html>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您需要消除startTime变量,并将引用作为service.startTime。您已在服务上为其创建了一个属性,但其余代码引用了var而不是属性。

function setStartTime(startTime) {
    service.startTime = startTime;
}

function getStartDate() {
    return service.startTime;
}      

不确定这是否是您的所有代码,但看起来StartDate的一些用途也应该是StartTime。

答案 2 :(得分:0)

答案 3 :(得分:0)

您的代码没有任何问题。如果我只是替换您的setStartTime方法参数名称,那只是导致冲突的命名约定。一切都运作良好。

&#13;
&#13;
// JavaScript source code

(function () {
    'use strict';

    angular.module('app',[])
    
})();


(function () {
    'use strict';

    angular
      .module('app')
      .factory('appcontext', appContext);

    function appContext() {
        var service = {            
          getStartDate: getStartDate,         
          setStartTime : setStartTime,
          startTime : startTime
        };

        return service;     

        var startTime = '';

        function setStartTime(newStartTime) {
            startTime = newStartTime;
        }

        function getStartDate() {
            return startTime;
        }      
        
    }
})();


(function () {
    'use strict';

    angular.module('app')
           .controller("InsController", InsController)

    InsController.$inject = ['appcontext'];

    function InsController(appcontext) {

        appcontext.setStartTime(new Date());

        console.log(appcontext.getStartDate()); 

        appcontext.startTime = new Date();

        console.log(appcontext.startTime); //prints the date correctly

    }          


})();
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<html ng-App="app">
  
  <div ng-controller= "InsController">
    
    <div>{{ }}</div>
    
    </div>
  
  </html>
&#13;
&#13;
&#13;