【问题标题】:How to use angular variable in jQuery code如何在jQuery代码中使用角度变量
【发布时间】:2014-12-01 07:29:08
【问题描述】:

我有一个使用 angular 生成名称列表的输入,我希望每个名称都是一个链接,该链接以名称作为输入值提交表单。

<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?

【问题讨论】:

  • 这将是一种糟糕的方式。为什么不把它作为你的指令的一部分并处理来自它的点击呢?这将是完成它的正确方法。
  • 我愿意尝试,我还没学会怎么做。也许你可以把我链接到类似的东西。
  • 让我为你准备一把小提琴
  • 好吧,文档似乎有你需要的一切,包括一个 plnkr 代码演示。在docs.angularjs.org/api/ng/filter/filter 找到它

标签: javascript jquery angularjs forms


【解决方案1】:

试试

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

【讨论】:

  • 做到了。完美运行。
【解决方案2】:

没有简单的方法可以做到这一点。

但是,在您的情况下,您可以轻松使用:

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

【讨论】:

    【解决方案3】:

    您正在结合两种并不真正兼容的技术。如果您选择在您的网站中仅使用 AngularJS 或仅使用 JQuery 会更好。

    但是如果您希望值是锚中的文本,请在 jquery 中回答您的问题:

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

    或者,如果您想以 Angular 方式解决此问题,请执行以下操作:

    在您的控制器 (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');
                    });
                });
            }
        };
    });
    

    【讨论】:

    • 我应该在我的控制器中的哪个位置注入那个作用域 sn-p?
    • 目前纯角码不生成链接。
    • 在此处查看控制器文档:docs.angularjs.org/guide/controller。 “Simple Spicy Controller”示例有一个类似于上面定义的控制器方法
    • 对,您还想提交表单...我错过了那部分。这就是为什么另一个人建议你需要一个指令。指令用于直接访问 html 代码。因此,与其像在 jquery 中那样使用 $('form').submit() ,不如现在必须编写一个自定义指令。请参阅此示例。 jsfiddle.net/unWF3我现在将编辑上面的答案。
    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多