2015-11-02 112 views
1

我有一個textarea在我的HTML這樣的:AngularJS - 控制器之間的共享範圍值

<textarea ng-model="commentBox"></textarea> 

要訪問此我​​只是在我的控制器使用「$ scope.commentBox」。但我的問題是,我如何訪問不同的控制器內相同的評論框?

我有一個工廠/服務設置爲此目的,但我無法弄清楚如何獲得commentBox值在那裏,爲我的其他控制器使用它。

在我的工廠中,我有一個對象var saved = {},我想添加一個名爲「comment」的屬性,並在textarea中包含任何值。像這樣saved.comment = commentbox然後從另一個控制器訪問該值。

我在Angular上還是個新手,並試圖將參數中的範圍信息發送給facory。

var saved = {}; 

factory.addComment = function (commentbox) { 
    saved.comment = commentbox 
} 

然後讓我的控制器發送按鈕上點擊範圍的信息,

$scope.testFunction = function() { 
    myFactory.addComment($scope.commentBox); 
} 

但是,是的,沒有工作了。

請注意,我需要這個在工廠內工作,而不是在HTML中使用另一個ng-controller。

+0

是否有任何理由不能做ng-Change = factoryProduct.addComment(commentBox),其中factoryProduct是Controller從Factory創建的實例?我假設你說你使用的工廠是這樣的http://www.sitepoint.com/tidy-angular-controllers-factories-services/ –

+0

不熟悉ng-change,從來沒有使用它。但我有一個路徑,可以控制哪些控制器用於什麼html。我在第一頁有ng-model,我需要在我的頁面2上獲得它的價值。爲此,我嘗試將控制器1的值放入工廠,因此控制器2可以訪問它。 – qua1ity

+0

我認爲你只需要像ng-change =「vm.addComment(commentBox)」這樣的東西,其中vm.addComment做類似yourService.setCurrentComment(newValue)的東西。 –

回答

1

您需要在您的工廠恢復已保存的變種

var saved = {}; 


factory.addComment = function (commentbox) { 
    saved.comment = commentbox 
} 

return saved 

這裏有使用服務

app.service('fakeService', function() { 
    var savedData = {}; 

    var addComment = function(newComment) { 
     savedData.commnet = newComment; 
    }; 

    var getComment = function(){ 
     return savedData.comment; 
    }; 

    return { 
    addComment: addComment, 
    getComment: getComment 
    }; 

}); 

一個例子,在你的控制器注入工廠/服務

app.controller('fakeController', ['$scope','yourFactory',function ($scope, yourFactory) { 

    console.log(yourFactory.comment) // here you should log saved comment 

}]) 

然後在您的控制器中,您可以注入工廠/服務並訪問保存的數據。但請記住,您刷新頁面,數據將會丟失,因此,爲避免這種情況,您應該將數據保存在數據庫中。

+0

我確實返回了保存的變量以及其他需要返回的內容。我只是不知道如何將範圍值添加到工廠,以便其他控制器可以訪問它。 – qua1ity

+0

@ qua1ity我更新了我的答案,檢查它 – levi

+0

感謝您的回覆,我的工廠已經注入控制器。我做了一個簡單的jsfiddle來縮小我的問題。 http://jsfiddle.net/aw5p5hyr/ MyCtrl2如何使用工廠獲得commentBox的值(如在MyCtrl1中)? – qua1ity

相關問題