2014-12-08 24 views
0

我試圖自定義這個工作http://jsfiddle.net/markcoleman/JNqqU/,在當前工作的小提琴中直接分配了對象。在那裏我試圖將其更改爲$ scope.obj.items。將對象傳遞給指令不起作用。將對象值傳遞給指令而不是任何其他數據變量

我是否需要爲變量寫一些$ watch?我正在獲取動態值,這就是爲什麼我想通過此值傳遞Object值。

代碼::

<a href="#" pop-over items="obj.items", title="Mode of transport"> 
    Show Pop over</a> 

的JavaScript指令部分::

scope: { 
      items: '=', 
      title: '@' 
     } 

任何建議,

我想下面小提琴 http://jsfiddle.net/JNqqU/652/

+0

你準備好了什麼?該對象正確傳遞給指令。 – 2014-12-08 08:35:02

+0

點擊:updateitem「我需要添加數組中的元素,或者說最初在頁面加載它將是未定義的或什麼,api將返回結果後,值應該通過 – anam 2014-12-08 08:36:08

回答

1

是你應該做一個觀察者。

$scope.$watchCollection('items', function (newValue, oldValue) { 
    if (newValue) { 
    buildTemplate(newValue); 
    } 
}); 

注:我用watchCollection是因爲它是一個數組。如果它是一個對象或簡單的值,$ watch將被用來代替。

+0

它給我一個未定義的錯誤...檢查它在這裏http://jsfiddle.net/JNqqU/653/ – anam 2014-12-08 08:42:35

+0

對不起,你的變量名扔給我;我應該仔細閱讀,你應該使用$ watch('items',function(){},true)。 「true」參數是可選的,應該謹慎使用。「true」參數會在物品發生變化時進行深度觀察。 – 2014-12-08 08:54:04

1

你並不需要把它包裝成對象,但不「改寫」在「更新」方法整個數組,但值壓入它:

bootstrap.controller('maincnt',function($scope){ 
    $scope.items = []; 
    $scope.updateitem=function(){ 
     alert('scope update called'); 
     $scope.items.push('car', 'truck', 'plane', 'bike'); 
    } 

}); 

http://jsfiddle.net/btfu30k2/1/

$腕錶也沒有必要。

+0

最初在頁面加載它將是未定義或什麼,api將返回結果後,值應該通過 – anam 2014-12-08 08:38:09

+0

我的小提琴不反映更新值在指令,它不是項目它是$ scope.obj.items – anam 2014-12-08 08:38:55

+0

因此定義它作爲空數組,並在API回調中將值推入數組中。 – Rasalom 2014-12-08 08:39:11

2

您可以將控制器改成這樣:

bootstrap.controller('maincnt', function ($scope) { 
    $scope.obj = { // declare the scope object here with a blank items 
     items: [] 
    }; 
    $scope.updateitem = function() { 
     alert('scope update called'); 
     $scope.obj.items = ['car', 'truck', 'plane', 'bike']; // now update here 
    } 
}); 

Checkout fiddle.

1

需要兩個變化:

在HTML變化items :: {{obj.items}}

在控制器默認OBJ項目變更應分配與空數組($scope.obj={items:[]};)作爲popOver的$compile正在尋找f或scope.items

看到這個Working fiddle

而且你的測試代碼{{items | json }}模板可以在觀察之後被刪除。

相關問題