2015-09-15 268 views
2

上更新視圖我使用的是優秀的AngularJS Rails Resources,並與一個對象 - 這反過來又深嵌套的對象 - 當我更新它的一些屬性,更新的屬性不會在模板上顯示,直到我重新加載頁面。角JS不是嵌套對象

讓從頭開始:這是我的目標:

var invoice = Invoice.get($stateParams.invoiceId).then(function (result) { 
     $scope.invoice = result; 
    }); 

這裏就是我打開我的模式來編輯值:

$scope.openEdit = function (edit) { 
    $scope.editModal = $modal.open({ 
    templateUrl: 'editModalContent.html', 
    controller: 'InvoiceShowController', 
    size: 'lg' 
    }); 
    $scope.editModal.result.then(function(select) { 
    }); 
}; 

$scope.cancel = function() { 
    $scope.$close(); 
}; 

$scope.ok = function() { 
    $scope.invoice.update().then(function (result) { 
    $scope.cancel(); 
    console.log(result); 
    }); 
}; 

在我看來,我有以下幾點:

... 
<li>{{invoice.trading_details.trading_name}}</li> 
<li>{{invoice.trading_details.trading_address_1}}</li> 
... 

在模態的身體我有以下幾點:

... 
    <div class="form-group"> 
     <label for="exampleInputEmail1">Trading Name</label> 
     <input ng-model="invoice.trading_details.trading_name" type="text" class="form-control" id="exampleInputEmail1"> 
    </div> 
    <div class="form-group"> 
     <label for="exampleInputEmail1">Trading Address Line 2</label> 
     <input ng-model="invoice.trading_details.trading_address_1" type="text" class="form-control" id="exampleInputEmail1"> 
    </div> 
    ... 

所以,當我在編輯模態的屬性和安慰的對象,這些變化都在那裏。當我保存並取回結果時,所做的更改就在那裏,但無論出於何種原因視圖未更新。

任何想法?

編輯:我的整個controller

+1

我有,你有兩個不同的範圍兩個不同的'invoice'對象的感覺。你可以嘗試在視圖和模式中註銷$ scope。$ id嗎? – BroiSatse

+0

@BroiSatse你是對的。 ID是不同的。在這種情況下,我怎樣才能將相同的'$ scope'傳遞給模態?有一件事讓我印象深刻:在Angular Bootstrap例子中,爲什麼需要兩個控制器? – WagnerMatosUK

+0

嗯,說實話它並不能證明什麼。 Modal在您自己的範圍內運作,這是您視野範圍內的一個孩子。但是,這意味着您的模態範圍發票與您的視圖發票完全一樣,除非您在控制器中重寫了它。你介意發佈你的InvoiceShowController嗎? – BroiSatse

回答

2

看起來你缺少resolve設置。它將數據傳遞給你的模態。

$scope.openEdit = function (edit) { 
    $scope.editModal = $modal.open({ 
     templateUrl: 'editModalContent.html', 
     controller: 'InvoiceShowController', 
     size: 'lg', 
     //notice a function is returning the data 
     resolve: { 
     invoice: function(){ 
      return $scope.invoice; 
     } 
     } 
    }); 
}; 

編輯 鏈接Plunker:http://plnkr.co/edit/IJvdBJrJngsNYaG39Gfh?p=preview

注意的決心如何創建一個實例發票傳遞到editCtrl。

UPDATE 你也可以做

$scope.editModal = $modal.open({ 
     templateUrl: 'editModalContent.html', 
     controller: 'InvoiceShowController', 
     size: 'lg', 
     //notice a function is returning the data 
     resolve: { 
     invoice: function(){ 
      return Invoice.get($stateParams.invoiceId); 
     } 
     } 
    }); 

...因爲resolve可以處理一個承諾。

+0

不幸的是,也沒有工作... – WagnerMatosUK

+1

你可以把{{發票}}在你的模式,看看它是否分配任何東西? – mitch

+0

是的。它似乎是整個發票對象。 – WagnerMatosUK