我的控制器中有以下功能
$scope.progress = function () {
var form = $scope.coverDetails;
for (i in form) {
if ($scope.coverDetails[i].hasOwnProperty('$valid') && !$scope.coverDetails[i].$valid) {
$location.hash(i + '-label');
break;
}
};
$scope.submitted = true;
$scope.validateForm();
if ($scope.coverDetails.$valid) {
$location.path('/zones');
}
$anchorScroll();
};
这很有效。但不是真的。
当我单击提交按钮(调用上面的函数)时,它成功更新了哈希,但是,{2}或ng-class
指令都没有更新,直到第二次按下按钮,假设{{ 1}}在第一个和第二个之间没有变化。
其中一个不起作用的例子是
ng-show
在此示例中,未应用类$location.hash
,但如果该字段无效,则会滚动到标签。
答案 0 :(得分:0)
所以我弄清楚发生了什么, 更改哈希导致tempalte重新加载,因此必须使用以下代码
来防止这种情况angular.module("ScrollToErrorPrevention", []).factory('$preventErrorReload', ['$route',
function ($route) {
return function ($scope) {
var lastRoute = $route.current;
$scope.$on('$locationChangeSuccess', function () {
if (lastRoute.$$route.templateUrl === $route.current.$$route.templateUrl) {
$rootScope.$broadcast('locationChangedWithoutReload', $route.current);
$route.current = lastRoute;
}
});
};
}
])
并将其包含在应用内:
angular.module('app', ['ScrollToErrorPrevention'])
并从控制器中调用工厂方法
angular.module('app').controller('controller', ['$scope', $preventErrorReload,
function($scope, $preventErrorReload) {
$preventErrorReload($scope);
...
}
]);
在此之后,使用$location.hash(...)
和$anchorScroll()
一起工作正常
这项工作并非完全由我自己完成,而是从一个或两个(更多?)其他来源修改