【问题标题】:Use AngularJS just for routing purposes仅将 AngularJS 用于路由目的
【发布时间】:2013-12-23 15:28:12
【问题描述】:

我刚刚被分配了一个完全使用 jQuery 制作的网站。它异步加载了几个页面,并且想成为一个 SPA。

现在唯一的问题是开发人员一般没有考虑 URL,人们只能通过 www.example.com 访问该站点

我有点了解 AngularJS,我的问题是: - 是否值得集成 AngularJS 来管理路由,这样我就不必通过 jQuery 并检查每次点击,然后检查每个链接?

谢谢

【问题讨论】:

  • 您知道可以将点击事件委托给document 并为整个应用程序添加一个单一的侦听器吗?
  • 不,我不知道...它是如何工作的?
  • $(document).click(function(e) { do something with e.target }learn.jquery.com/events/event-delegation

标签: javascript jquery angularjs


【解决方案1】:

当然你可以使用 AngularJs 来做路由。

在 Angular 和 jquery 停止一起工作的地方,你不能在 angular 指令中生成的视图上使用 jquery 选择,因为 jquery 不会选择运行时生成的视图。

要监视 angularjs 何时完成 DOM 操作,请在您的 angular 控制器中使用它来调用 jqueryStartWork 方法,该方法应该启动 jquery 的工作。

function stuffController($scope) {
$scope.$on('$viewContentLoaded', jqueryStartWork);
}

对于某些 angularjs 指令渲染监视器,您可以有一个指令,当 angular 完成该指令的 dom 操作时,该指令将触发事件。 例如监控 ng-repeat,渲染完成添加这个指令

var app = angular.module('myapp', [])
.directive('onFinishRender', function ($timeout) {
return {
    restrict: 'A',
    link: function (scope, element, attr) {
        if (scope.$last === true) {
            $timeout(function () {
                scope.$emit('ngRepeatFinished');
            });
        }
    }
}
});

然后在控制器中添加一个新函数,该函数将在 ng-repeat 完成时调用,如下所示。

$scope.$on('ngRepeatFinished', function (ngRepeatFinishedEvent) {
    //you also get the actual event object
    //do stuff, execute functions -- whatever...
    alert("ng-repeat finished");
});

但不要忘记将此指令添加到您的 ng-repeat 标记中,就像这样

<tr data-ng-repeat="product in products" on-finish-render>

[编辑] 今天我一直在尝试在 md-tab 的 div 中运行一个简单的 D3 svg 附加脚本。在控制器完成(md-tab 也完成)渲染所有内容后,我遇到了绘制它的问题。我想如果您使用 $timeout (windows.setTimeout 上的包装器),它将向浏览器的事件队列添加一个新事件。它将在当前队列(渲染)之后和您按顺序添加的新超时事件函数之前运行。它也适用于 0ms。

 $timeout(drawTree, 0); //drawTree is a function to get #tree div in a md-tab and append a D3 svg

【讨论】:

  • 在不破坏已经(糟糕)完成的事情的情况下,我将如何去做?
  • 您可以并排使用您的 jquery。问题出在哪里。在这里提出问题。你问可以吗?我告诉你,是的!
  • @ahmadalibaloch 相当不错的解决方案。谢谢!
猜你喜欢
  • 2016-12-07
  • 2016-05-09
  • 2016-08-23
  • 2016-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-12
  • 1970-01-01
相关资源
最近更新 更多