2014-12-01 4 views
0

У меня есть вход, который использует угловой для создания списка имен, и я хочу, чтобы каждое имя было ссылкой, которая представляет форму с именем в качестве входного значения.Как использовать угловую переменную в коде jQuery

<form method="POST" action="/results/" id="artform> 
{% csrf_token %} 
    Search:<input type="text" name="search" ng-model="search" /> 
      <input type="submit" value="Submit" /> 
</form> 
<table ng-controller="mycontroller"> 
    <tr ng-repeat="artist in artists | filter:search | limitTo:10"> 
     <td ng-hide="!search"> 
      <a class="click-me" href="javascript:$('#artform').submit();"> 
       {({ artist })} 
      </a> 
     </td> 
    </tr> 
</table> 

<script> 
    (function ($){ 
    $(function() { 
     $('body').delegate('.click-me', 'click', function(){ 
      $('input[name="search"]').val({({ artist })}); 
     }); 
    }); 
})(jQuery);  
</script> 

.val({({ artist })});, где я хочу, чтобы ввести независимо от значения {({ artist })} это, так как я хочу ссылку отправить форму с именем в качестве значения. Как я могу получить угловую переменную в jquery?

+2

Это будет ужасный способ сделать это. Почему бы просто не сделать эту форму частью вашей директивы и обработать клик от нее? Это был бы правильный способ сделать это. –

+0

Я открыт для того, чтобы попробовать, я не научился. Может быть, вы могли бы связать меня с чем-то подобным. –

+1

Позвольте мне взломать вам скрипку –

ответ

1

попробовать

$('body').delegate('.click-me', 'click', function(){ 
      var artist = $(this).text(); 
      $('input[name="search"]').val(artist); 
}); 
+0

Это сделало это. Работает отлично. –

1

Там нет простого способа достижения этой цели.

Однако в вашем случае, вы можете легко использовать:

$('input[name="search"]').val($(this).text()); 
1

Вы объединяете две технологии, которые на самом деле не совместимы. Было бы лучше, если бы вы решили использовать только AngularJS на своем сайте или только JQuery.

Но чтобы ответить на ваш вопрос в JQuery, если вы хотите, чтобы значение быть текст якоря:

$('body').delegate('.click-me', 'click', function(){ 
      $('input[name="search"]').val($(this).text()); 
     }); 

В качестве альтернативы, если вы хотите, чтобы решить эту проблему в угловом образом сделать следующее:

Создайте метод в контроллере (mycontroller) с именем clickMe и привяжите значение привязки к текстовому полю поиска. Вам нужно будет переместить контроллер в свой код, чтобы поле поиска и таблица были частью одного и того же контроллера.

<div ng-controller="mycontroller"> 
<form method="POST" action="/results/" submit-on="clickMeEvent"> 
{% csrf_token %} 
    Search:<input type="text" name="search" ng-model="search" /> 
      <input type="submit" value="Submit" /> 
</form> 
<table > 
    <tr ng-repeat="artist in artists | filter:search | limitTo:10"> 
     <td ng-hide="!search"> 
      <a ng-click="clickMe(artist)"> 
       {({ artist })} 
      </a> 
     </td> 
    </tr> 
</table> 
</div> 

Контроллер:

$scope.clickMe = function (artist) { 
    $scope.search = artist; 
    $scope.$broadcast('clickMeEvent'); 
}; 

Директива:

app.directive('submitOn', function() { 
    return { 
     link: function(scope, elm, attrs) { 
      scope.$on(attrs.submitOn, function() { 
       //We can't trigger submit immediately, or we get $digest already in progress error :-[ (because ng-submit does an $apply of its own) 
       setTimeout(function() { 
        elm.trigger('submit'); 
       }); 
      }); 
     } 
    }; 
}); 
+0

Где в моем контроллере я вставляю этот фрагмент области? –

+0

В настоящее время чистый угловой код не генерирует ссылки. –

+0

Ознакомьтесь с документацией контроллера здесь: https://docs.angularjs.org/guide/controller. Пример «Simple Spicy Controller» имеет метод контроллера, подобный описанному выше. – user3589536

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