角度指令字段不需要括号

时间:2015-11-12 01:40:15

标签: javascript angularjs angular-ui-bootstrap

我正在使用UI Bootstrap的datepicker函数,我希望得到一个传递给属性的值。

// JS
$scope.myMaxDate = new Date();

<!-- HTML -->
<input datepicker-popup="MM/dd/yyyy" max-date="myMaxDate" />

我不明白为什么在这种情况下max-date attr采用字符串而不是像{{myMaxDate}}这样的表达式。如何掌握实际价值?

更重要的是,我正在使用装饰器来修改此指令中的某些数据,并希望访问此属性,但我得到的只是字符串myMaxDate

    $provide.decorator("datepickerPopupDirective", ["$delegate", function($delegate) {
        // get references to the directive and old link function
        var directive = $delegate[0];
        var link = directive.link;

        // create a new link function using compile
        directive.compile = function() {
            // the new link function we want to return
            return function(scope, element, attrs, ngModelCtrl) {
                console.log(attrs.maxDate); // 'myMaxDate'

                // invoke the old link function
                link.apply(this, arguments);
            };
        };

2 个答案:

答案 0 :(得分:3)

要回答有关in指令如何找到>>> names = ['Will', 'Dodd', 'Harry'] >>> print 'Will' in names True >>> print 'Barry' in names False 属性的实际值的问题,很可能会使用datepicker-popup的{​​{1}}方法。

因此在您的代码中,要查看实际值的使用:

max-date

这也是该指令不需要双花括号的原因。实际上,双花括号会导致问题,因为它会将$eval对象转换为字符串,从而丢失scope对象的方法。

有关 console.log(scope.$eval(attrs.maxDate)); 方法的详细信息,请查看AngularJS Scope API

答案 1 :(得分:0)

首先,你完全覆盖compile。这会产生潜在的问题。

 $provide.decorator("datepickerPopupDirective", ["$delegate", function($delegate) {
        // get references to the directive and old link function
        var directive = $delegate[0];
        var compile = directive.compile;

        directive.compile = function() {

            var link = compile.apply(this, arguments); 

            // the new link function we want to return
            return function(scope, element, attrs, ngModelCtrl) {
                console.log(attrs.maxDate); // 'myMaxDate'

                // invoke the old link function
                link.apply(this, arguments);
            };
        };

....