仅将AngularJS用于路由目的

时间:2013-12-06 10:08:41

标签: javascript jquery angularjs

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

现在唯一的事情是开发人员一般不会考虑URL,除了www.example.com以外,人们无法以任何其他方式访问网站

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

由于

1 个答案:

答案 0 :(得分:9)

当然,您可以使用AngularJs进行路由。

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

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

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

对于某些angularjs指令渲染监视器,您可以拥有一个指令,该指令将在角度完成该指令的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