4

我試圖在angularjs中將一個模塊的值傳遞給另一個模塊。 使用.value它工作正常。如何更新控制器angularjs內的.value?

工作: -

var app = angular.module('app', []); 
app.value('movieTitle', 'The Matrix'); 
var app1 =angular.module('app1', ['app']); 
app1.controller('MyController', function (movieTitle) { 
//Here I am getting value. which is working fine. 
console.log(movieTitle) 
}) 

不工作: -

var app = angular.module('app', []); 
app.value('movieTitle', 'The Matrix'); 
app.controller('MyController', function (movieTitle) { 
//Here I override the value. 
movieTitle = "The Matrix Reloaded"; 
}) 
var app1 =angular.module('app1', ['app']); 
app1.controller('MyController', function (movieTitle) { 
//Here I am getting old value not update value. 
console.log(movieTitle) 
}) 

在第二個示例中,我嘗試更新的價值及其更新的罰款。但是當Am訪問其他模塊的值時,它只顯示舊值沒有更新,任何人都可以幫助我。我錯了......

+0

有機會看到答案嗎? –

回答

1

JavaScript字符串是不可變的,所以你不能更新注入值(因爲它是一個字符串) - 你只是改變注入變量的內容。你可以採取另一種方法在包含對象中的字符串,現在你可以更新對象的字符串:

var movie = { title: 'The Matrix' }; 

angular.module('app', []) 
    .value('movie', movie) 
    .controller('MyController', function (movie) { 
     //Here I override the value. 
     movie.title = "The Matrix Reloaded"; 
    }); 

angular.module('app1', ['app']) 
    .controller('MyController', function (movie) { 
     console.log(movie.title); 
    }); 
0

值基本上是一個string這是它是一個原始類型,並沒有參考,因此該值綁定一次。

我做了一個fiddle有一家工廠,用它的內部模塊的應用程序根據您的要求

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

app.controller('HelloCtrl', HelloCtrl); 
app.controller('GoodbyeCtrl', GoodbyeCtrl); 
app1.controller('ctrl2', ctrl2); 
app.factory('testFactory', function(){ 
     var _name = 'hello'; 
    return { 
     getName: function(text){ 
      return _name; 
     }, 
     setName: function(name){ 
      _name = name; 
     } 
    }    
}); 

function HelloCtrl($scope, testFactory){ 
    $scope.name = testFactory.getName(); 
    testFactory.setName('hello2'); 
} 

function GoodbyeCtrl($scope, testFactory){ 
    $scope.name = testFactory.getName(); 
    testFactory.setName('hello3'); 
} 

function ctrl2($scope, testFactory){ 
    $scope.name = testFactory.getName(); 
} 

希望它能幫助。