1

控制器在 Angular 中做这样的事情是否合法?

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

或者

      $rootScope.foo = {name: "Jane Q. Public", favoriteColor: "green"}
4

2 回答 2

0

关于您评论中的问题,分享日期的好方法是通过 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);
            }
        };
    }
]);

使用服务的另一种方式(稍微修改了 Yoni 的代码):

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;
});
于 2014-09-09T19:20:22.623 回答
0

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

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

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 的所有其他控制器。

于 2014-09-09T19:20:46.473 回答