2014-03-28 52 views
1

這是How to create this global constant to be shared among controllers in Angularjs?的後續問題如何用AngularJS控制器中可共享的屬性創建對象?

提供的答案允許恆定的$ webroot在控制器之間共享。

app = angular.module('myApp', []); 
app.constant('$webroot', 'localhost/webroot/app'); 

app.controller('myController', ['$scope', '$webroot', function($scope, $webroot) { 
    $scope.webroot = $webroot; 
}]); 

但是,問題是如果我有10個常量,那麼所有10個常量都必須注入控制器。這使控制器聲明看起來很長很醜。 如何創建一個可在AngularJS控制器中共享的屬性的對象?以這種方式,我只需要注入一個對象而不是許多常量。這可以在Angularjs中完成嗎?謝謝。

回答

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

app.constant('config', { 
    prop1: 'val1', 
    prop2: 'val2', 
    ... 
}); 

app.controller('Ctrl', ['config', function(config) { 
    console.log(config.prop1); 
    console.log(config.prop2); 
    ... 
}]); 
2

您可以使用該工廠:

app = angular.module('myApp', []); 
app.factory('MyGlobals', function() { 
    return { 
    globalOne: 12345, 
    globalTwo: 'Hey there', 
    globalThree: {foo: 'bar'}, 
    globalFour: [1, 2, 3, 4], 
    isFoo: function() { 
     return (this.globalTwo == 'Foo' ? true : false); 
    } 
    } 
}); 

app.controller('myController', ['$scope', 'MyGlobals', function($scope, MyGlobals) { 
    $scope.globalOne = MyGlobals.globalOne 
    [...] 
    if (MyGlobals.isFoo()) { 
    // Be creative 
    } 
}]); 
2

您可以共享多種方式不同的控制器之間的對象或變量 -

  1. 使用工廠使用

  2. 服務

  3. 廣播或發出

如果你的要求是公正地分享多個控制器之間的變量,你可以使用的服務實現這一目標。

創建一個服務如下 - 這裏的名字是sharedService。你可以使用你自己的服務名稱。然後使用'this'關鍵字定義/聲明變量(儘可能多)。在您的控制器

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

    app.service('sharedService', function ($rootScope) { 
    this.globalvar1 = "my global variable1"; 
    this.globalvar2=""; 
    }); 

進樣的服務,然後訪問該服務變量如下

app.controller('myController', ['$scope', 'sharedService', 
    function ($scope,sharedService) { 
    var myGlobalVariable=sharedService.globalvar1; 
    sharedService.globalvar1="my global variable value changed from controller"; 
    }]); 

可以使用的服務變量,所有的控制器,但你必須在注入控制器

服務名稱
相關問題