2016-06-23 3 views
0

Я хочу, чтобы получить сырое значение атрибута директивы, но он держит retrieveing ​​имени буквального атрибута вместо исходного значениякак получить необработанное значение директивы углового атрибута

--html

<input my-directive="5==5" /> 
<div my-directive="isFoodReady()"> 
    <!--some content--> 
</div> 

- -JS

myModule.directive('myDirective',function(){ 
    restrict: 'A', 
    priority: 0, 
    link:function(scope,element,attr){ 
     console.log(attr.myDirective); 
     //displays "5==5","isFoodReady()" instead of true 
    } 
}); 
+0

Вы можете создать скрипку или codepen легко отлаживать? –

+0

Почему бы вам просто не оценить это в контроллере? – charlietfl

ответ

0

Здесь он работает

angular.module('app', []) 
 
    .directive('myDirective', function() { 
 
    return { 
 
     restrict: 'A', 
 
     priority: 0, 
 
     link: function(scope, element, attr) { 
 
     console.log(eval(attr.myDirective)); 
 
     } 
 
    } 
 
    }); 
 

 
function isFoodReady() { 
 
    return true; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="app"> 
 
<input my-directive="5==5" /> 
 
<div my-directive="isFoodReady()"> 
 
    <!--some content--> 
 
</div> 
 
</div>

Имейте в виду, используя Eval является чрезвычайно опасным и страшная практика в целом. Вы не должны запускать javascript вне атрибута директивы, так как он оставляет ваш код открытым даже для простых методов инъекции кода.

Я настоятельно рекомендую вам посетить https://xss-game.appspot.com/, чтобы увидеть, что я имею в виду

+0

Что делать, если функция находится внутри контроллера? например $ scope.isFoodReady = function() {return true;} – anaval

+0

Это еще один вопрос, так как вы спросили, как получить оцененное значение из атрибутов директивы, а не как выполнить функцию контроллера из директивы. В любом случае, если то, что вы ищете, является директивной/диспетчерской связью, это может помочь: http://jsfiddle.net/simpulton/geaab/ –

+0

Я предлагаю, чтобы, если ответы моего или Rohit успешно решают ваш вопрос, вы отмечаете его как принятый и делаете другой вопрос о том, «как сообщить директиву контроллеру», если у вас все еще есть проблемы. –

0

попробовать console.log(eval(attr.myDirective));

+0

Мне нужно что-то вводить для использования функции eval()? – anaval

+0

его функция javascript. Нет необходимости в инъекции –

Смежные вопросы