我发现自从以角度构建应用程序后,我需要手动将页面更新到我的范围.
我知道这样做的唯一方法是$apply()从我的控制器和指令的范围调用.这个问题是它不断向控制台抛出一个错误:
错误:$ digest已在进行中
有谁知道如何避免这个错误或以不同的方式实现相同的事情?
我正在编写一个小型AngularJS应用程序,它具有登录视图和主视图,配置如下:
$routeProvider
.when('/main' , {templateUrl: 'partials/main.html', controller: MainController})
.when('/login', {templateUrl: 'partials/login.html', controller: LoginController})
.otherwise({redirectTo: '/login'});
Run Code Online (Sandbox Code Playgroud)
我的LoginController检查用户/传递组合并在$ rootScope上设置一个反映这个的属性:
function LoginController($scope, $location, $rootScope) {
$scope.attemptLogin = function() {
if ( $scope.username == $scope.password ) { // test
$rootScope.loggedUser = $scope.username;
$location.path( "/main" );
} else {
$scope.loginError = "Invalid user/pass.";
}
}
Run Code Online (Sandbox Code Playgroud)
一切正常,但如果我访问http://localhost/#/main我最终绕过登录屏幕.我想写一些类似"每当路由改变时,如果$ rootScope.loggedUser为null然后重定向到/ login"
...
......等一下 我能以某种方式听路线变化吗?无论如何我会发布这个问题并继续寻找.
我有一个带有输入字段和验证设置的表单,通过添加required属性等.但对于某些领域,我需要做一些额外的验证.我如何"点击" FormController控件的验证?
自定义验证可能类似于"如果填写了这3个字段,则此字段是必需的,需要以特定方式进行格式化".
有一种方法,FormController.$setValidity但看起来不像公共API,所以我宁愿不使用它.创建一个自定义指令并使用NgModelController看起来像另一个选项,但基本上要求我为每个自定义验证规则创建一个指令,这是我不想要的.
实际上,将控制器中的字段标记为无效(同时保持FormController同步)可能是我在最简单的场景中完成工作所需要的,但我不知道该怎么做.
有没有人知道在angularJS中使用美元方法和变量背后的原因是指示angularJS在消化过程中避免检查这些值?所以,如果角度遇到$scope.$value和$scope.value,然后它会避免检查前,因为它与它的变量名称美元字符前缀?
如果$代表Angular中的内置服务,这个$$前缀是什么意思?我只是在Console中检查范围并看到了$$watchers, $$listeners等等