Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 控制器可以在$rootScope中创建任意属性吗_Angularjs_Rootscope - Fatal编程技术网

Angularjs 控制器可以在$rootScope中创建任意属性吗

Angularjs 控制器可以在$rootScope中创建任意属性吗,angularjs,rootscope,Angularjs,Rootscope,控制器这样做合法吗 $rootScope.someArbitaryObject = ["fee", "fie", "fo", "fum]; 或 关于评论中的问题,分享日期的一个好方法是通过localstorage或sessionStorage。我编写了一个storageService,它允许您保存、加载和删除 angular.module(yourApplication).service('storageService', [ function() {

控制器这样做合法吗

       $rootScope.someArbitaryObject = ["fee", "fie", "fo", "fum];


关于评论中的问题,分享日期的一个好方法是通过localstorage或sessionStorage。我编写了一个storageService,它允许您保存、加载和删除

angular.module(yourApplication).service('storageService', [
    function() {

        // implementation using localStorage. Future possibility to user $cookie service here, or sessionStorage, depends on what you want
        return {
            save: function(key, jsonData, expirationMin){ // default is 30 minute expiration
                if(!expirationMin)
                    expirationMin = 30;
                var expirationMS = expirationMin * 60 * 1000;
                var record = {
                    value: JSON.stringify(jsonData), 
                    timestamp: new Date().getTime() + expirationMS
                };
                localStorage.setItem(key, JSON.stringify(record));
                return jsonData;
            }, 
            load: function(key){
                var record = JSON.parse(localStorage.getItem(key));
                if (!record){ 
                    return false; 
                }
                return (new Date().getTime() < record.timestamp && JSON.parse(record.value));
            },
            remove: function(key){
                localStorage.removeItem(key);
            }
        };
    }
]);

是的,这是合法的,但前提是您希望所有控制器都能访问该模型

更好的做法是使用可以注入到一个或多个控制器的服务:

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

myApp.factory('MyService', function () {
  return { message: "I'm data from a service" };
});

myApp.controller('FirstCtrl', function($scope, MyService) {
  $scope.data = MyService;
});

myApp.controller('SecondCtrl', function($scope, MyService) {
  $scope.data = MyService;
});

您在一个控制器中对MyService属性所做的任何更改都将影响使用MyService的所有其他控制器。

ya如果您想在全球范围内使用MyService,这是合法的。。控制器共享数据有首选方法吗?是的,在服务中或使用localstorageyes有多种方法。1在angular$broadcast和$emit中使用事件2包括控制器上的$controller injector angular.moduleapp.controllers、[].controller'testCtrl'、['$scope'、'$controller',函数$scope、$controller{//controller scope,您希望在当前作用域中共享。$controller'controllerName',{$scope:$scope};}];所有控制器是否都看到相同的MyService实例,因此如果FirstCtrl对MyService.someProperty进行更改,SecondCtrl会看到更改?您可能可以保证使用.service而不是.Factory是的,MyService是一个单例。非常感谢提供有用的信息。这会很方便,EliteOctagon。谢谢你。但目前我需要共享动态、快速变化的数据,而不是持久化的数据。
var myApp = angular.module('myApp', []);

myApp.service('MyService', function () {
    var someData = 'test';
    return { 
        getData: function(){ return someData},
        setData: function(input){ someData = input;}
    };
});

myApp.controller('FirstCtrl', function($scope, MyService) {
    $scope.data = MyService.getData();
});

myApp.controller('SecondCtrl', function($scope, MyService) {
    $scope.data = MyService.getData;
});
var myApp = angular.module('myApp', []);

myApp.factory('MyService', function () {
  return { message: "I'm data from a service" };
});

myApp.controller('FirstCtrl', function($scope, MyService) {
  $scope.data = MyService;
});

myApp.controller('SecondCtrl', function($scope, MyService) {
  $scope.data = MyService;
});