angularjs $location.path仅在第二次单击时更新URL
发布时间:2020-12-17 17:48:31 所属栏目:安全 来源:网络整理
导读:我正在处理的网站有一个自定义CMS,我正在使用 angularjs进行内联页面编辑.数据库存储用于生成页面的 HTML,因此我无法严格使用客户端模板和模型. 我没有使用HTML5 pushState,因此URL类似于example.com/page#/widget/1/edit或example.com/page#/widget/new,我
我正在处理的网站有一个自定义CMS,我正在使用
angularjs进行内联页面编辑.数据库存储用于生成页面的
HTML,因此我无法严格使用客户端模板和模型.
我没有使用HTML5 pushState,因此URL类似于example.com/page#/widget/1/edit或example.com/page#/widget/new,我当前的问题是当我提交表单进行编辑时一个小部件或添加一个小部件,然后我希望页面通过将HTML注入DOM并将URL更改为默认值来重新加载其内容,我正在尝试使用$location.path(‘/’). 我当前的实现有多个问题(您将在演示中看到),其中一个是在我的表单submit()回调中,更改$location.path只更改第二个表单按钮单击时的URL.我也尝试更改单击“删除”的URL,但这也不起作用. http://jsfiddle.net/sZrer/1 customPage.controller('PageEditCtrl',function($scope,$http,$routeParams,$location,$route,$compile,PageState) { var widgetId = $routeParams.id || widgetCount + 1; $scope.pageState = PageState; $scope.widget = { id: widgetId,name: 'Widget ' + widgetId }; $scope.submit = function() { if ($scope.widget.id > widgetCount) widgetCount += 1; setTimeout(function() { var element = $compile(genHtml())($scope); angular.element('#page-content').html(element); $location.path('/'); },100); }; }); 解决方法
setTimeout()与Angular不能很好地混合(Angular使用一个事件循环来检查模型的变化,但是为了能够做到这一点,它必须能够控制你app的所有部分; setTimeout()超出了Angular的控制,当你的应用程序的Angular部分的任何更改在setTimeout-handler中进行时,它通常需要另一个’round’的Angular事件循环才能获取这些更改).
如果用Angular自己的$timeout()替换它(确保也注入它),它会更好(jsfiddle). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |