Angular - 将变量传递给指令范围

时间:2013-07-17 10:53:45

标签: javascript angularjs angularjs-directive angularjs-scope

我想将一个对象传递给指令范围:

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'}
}

然而它返回字符串。我怎么做? :)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
        }
   };
});