我刚刚被分配了一个完全由jQuery构建的网站。它异步加载了几页,并希望成为SPA。
现在唯一的事情是开发人员通常不会考虑URL,除了www.example.com之外,人们无法以其他任何方式访问该网站。
我对AngularJS有点了解,我的问题是:
-是否值得集成AngularJS来管理路由,只是这样,我不必遍历jQuery并检查每个点击,然后检查每个链接?
谢谢
最佳答案
当然,您可以使用AngularJ进行路由。
angular和jquery停止协同工作的地方,您不能对angular指令生成的 View 使用jquery选择,因为jquery不会选择运行时生成的 View 。
要监视angularjs完成DOM操作的时间,请在angular的 Controller 中使用它来调用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');
});
}
}
}
});
然后在 Controller 中添加一个新功能,将在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追加脚本。在 Controller 完成渲染(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
关于javascript - 仅将AngularJS用于路由目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20421193/