[英]Angular JS how to update scope variable inside another scope variable
[英]How to set a $scope variable from inside another scope variable
我有以下代碼,並且我試圖在諾言(在本例中為$http
請求)完成后設置$scope
變量的值。 代碼如下:
.controller('NewItemCtrl', function ($scope, $state, LabelFactory) {
$scope.createItem = function (item) {
LabelFactory.createLabel(item)
.then(function (response) {
$scope.label = response.data;
$scope.thing = 'These are things';
$state.go('tab.newitem-label');
console.log($scope.label);
});
};
})
看起來應該可以,但不能。 即使我能夠正確登錄$scope.label
,當我在模板中查找該項目( NewItemCtrl
是其控制器)時,也沒有任何記錄。 好像我從來沒有發送過,即使它顯然具有價值。
有人可以向我解釋如何或者A.從另一個作用域內部設置$scope
屬性的值,或者B.實現同一目標的最佳實踐?
發生這種情況是因為您要進入另一個狀態,該狀態會重新創建范圍對象。
實現此目的的一種方法是使用分層狀態。 子作用域可以訪問其父狀態的作用域。 由於您要進入'tab.newitem-label',因此如果在進入此新狀態之前處於'tab'狀態,則在tab
狀態下設置label
就足以從tab.newitem
訪問它。
我相信您正在使用ui-router
。 然后,您可以使此標簽成為現有狀態的一部分。 可以通過$stateParams
訪問參數化的值。 因此, $state.go('tab.newitem-label');
轉移到$state.go('tab.newitem-label');
,則可以使用以下語法將參數傳遞到新狀態: $state.go('tab.newitem-label', {labelId: labelId});
然后,您可以在控制器中使用$stateParams.labelId
訪問labelId
參數,並且在創建控制器之前,可以通過狀態resolve
功能使用labelId
檢索標簽。 Resolve
功能可幫助您在實例化控制器之前檢索日期。 然后,您可以將已解析的數據注入到控制器中,就像向控制器注入服務一樣。
這是定義這種狀態的方式:
.state('tab.newitem-label', {
url: '/:labelId',
templateUrl: 'partials/yourpage.html',
controller: 'NewStateCtrl'
resolve: {
label: ['labelService', '$stateParams', function (labelService, $stateParams) {
return labelService.retrieveLabelFromLabelId($stateParams.labelId);
}]
}
})
您可以將手表放在{$ scope.label}上,看看新值更新是否觸發了手表功能的執行。一旦確認更新觸發了手表,請使用該功能更新所有場所/控制器,其中{ $ scope.label}可能已通過$ emit / $ broadcast使用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.