2013-07-17 142 views
4

我想將一個對象傳遞給該指令範圍:角 - 變量傳遞到指令範圍

JS:

app.directive('validatePrice', function() { 
    return { 
     link: function(scope, el, attrs){ 
      console.log(attrs.validatePrice); 
     } 
    }; 
}); 

HTML

<button validate-price="{priceValid: {'disabled': 'disabled'}}">Checkout</button>

其中priceValid是一個布爾值控制器範圍和{'disabled': 'disabled'}只是一個普通的對象。我期待我的attrs.validatePrice返回例如:

{ 
    true: {'disabled': 'disabled'} 
} 

但它返回字符串。我怎麼做? :)

回答

0
<validate-price-dir validate-price="{priceValid: {'disabled': 'disabled'}}">Checkout</validate-price-dir>  

app.directive('validatePriceDir', function() { 
    return { 
     restrict: 'E', 
     scope: { validatePrice: '=validatePrice' }, 
     link: function(scope, el, attrs){ 
      console.log(scope.validatePrice); 
     } 
    }; 
}); 
+1

不僅它返回字符串,而且還會拋出錯誤:10 $ digest()迭代到達。中止!'。 – acid

+2

默認指令僅限於A類(屬性)。你有一個與指令同名的屬性:無限循環 –

+0

@EduardGamonal右鍵,謝謝 – karaxuna

4

我不認爲你想要什麼是可能的。 priceValid將被解釋爲JavaScript的對象關鍵字–它不會被解釋爲true

反正$parse$eval是你需要使用一個對象傳遞給一個指令是什麼(如果你使用的不是一個孤立的範圍內):

<button validate-price="{priceValid: {'disabled': 'disabled'}}">Checkout</button> 

app.directive('validatePrice', function($parse) { 
    return { 
     link: function(scope, el, attrs){ 
      var model = $parse(attrs.validatePrice); 
      console.log(model(scope)); 
      console.log(scope.$eval(attrs.validatePrice)); 
     } 
    }; 
}); 

fiddle

如果您需要更改對象,請使用$ parse。有關這方面的例子,請參閱https://stackoverflow.com/a/15725402/215945