2016-03-11 48 views
0

我是新來的角度和手錶有一些麻煩。我正在監視控制器內的變量。一旦變量的值發生了變化,我想將這個改變的值發送給一個指令。通過角度指令訪問腕錶內的變量

這是手錶功能:

$scope.$watch("comboDetail", function(newValue, oldValue) { 
    $scope.overlayProductCard = $scope.comboDetail.collectionCd; 
    console.log("$scope.overlayProductCardWithinWatch", $scope.overlayProductCard); 
} 

我的指令:(裁剪爲閱讀的緣故)

return { 
scope: { 
     productCard: '=' 
    }, 
    restrict: 'E', 
    templateUrl: appVersionFactory.getViewBaseUrl() + '/assets/partials/tv/tv-overlay-link.html', 
    replace: true, 
    link: function($scope, iElm, iAttrs, controller) { 
     console.log("$scope.productCard", $scope.productCard); 

    }; 

但是,$scope.productCard返回undefined我而$scope.overlayProductCardWithinWatch返回我正確的數據。

如何在指令中接收這些數據?

+0

在你的html如何通過productCard到你的指令? 2路綁定應該注意更新指令的'productCard',所以你不需要做任何事情來「傳入」。指令中的'console.log'函數在第一次創建指令並且productCard爲「未定義」時運行。這可能是在稍後的時間點設置爲值 – rob

+0

應該寫在問題中,但這裏是我的HTML:

+0

看起來不錯。所以當你改變你的控制器的'$ scope.overlayProductCard'時,它會自動設置該指令的'$ scope.productCard' – rob

回答

1

可以說我有指令像<test param="controllerParam"></test>與模板<div>{{param}}</div>。如果我改變controllerParam在控制器中,我不需要看/別的東西 - 指令將獲得新的價值。如果我想在每次改變時在指令中記錄新值 - 那麼我需要在指令中觀察。

鏈接函數每個元素執行一次,所以你只記錄一次變量的值。 (最初的一個)

+0

良好的洞察力!謝謝。我不知道每個元素執行一次鏈接。我正在使用模板來生成指令HTML,我不想按原樣顯示overlayProductCard。我需要在發佈前操縱數據。在這種情況下,我該怎麼辦? –

+1

你可以在html中使用過濾器 - 這看起來很漂亮,或者使用指令來監視大型數組的性能。 –

+0

完美。這樣可行。謝謝。 –

0

試試這個:

link: function($scope, iElm, iAttrs, controller) { 
    scope.$watch('productCard', function (newValue) { 
    console.log("$scope.productCard", newValue); 
    }) 
}; 

和通productCard從你的HTML元素標記和以前一樣:
data-product-card="overlayProductCard"