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