javascript - Angularjs ng-show 基于回调

标签 javascript angularjs

我是 Angular 的新手,所以我可能遗漏了一些东西。

在我的注册表单上,我需要用户提供位置信息。根据他们是否允许/支持 navigator.geolocation,我想显示一个下拉菜单来选择一个位置。

Controller 。

$scope.showLoc = true;
if(navigator && navigator.geolocation){
    navigator.geolocation.getCurrentPosition(function(pos){
        $scope.showLoc = false;
    },function(err){
        $scope.showLoc = true;
    });
}

和我的表格:

<form class="form-horizontal" name="register"  ng-controller="RegisterCtrl"  ng-submit="registerUser()"> .... 
<div ng-show="showLoc" accesskey="">
    test
</div>
....
 </form>

这种方法对我不起作用。任何见解将不胜感激。

最佳答案

每当您在 angularjs 之外执行某种形式的操作时,例如使用 jquery 进行 ajax 调用,或者像您在此处的示例那样获取地理位置,您需要让 angular 知道自己更新。我查看了您的 jsfiddle 并将您的一些代码更改为如下所示:

var app = angular.module('myApp', []);
app.controller('RegisterCtrl',function($scope){
     $scope.showLoc = false;   
     navigator.geolocation.getCurrentPosition(function(pos){
             $scope.showLoc = true;
             $scope.$apply();
        },function(err){           
             $scope.showLoc = false;
             $scope.$apply();            
        });
});

现在 showLoc 在更新时更改为 true。这是使用 $apply() 方法的文档 http://docs.angularjs.org/api/ng.$rootScope.Scope#$apply

jsFiddle http://jsfiddle.net/yLFNP/6/

编辑:我的答案已被编辑,但我不同意编辑。虽然您可以将 $apply 方法包装在 $scope.showLoc = false 周围以使其“更短”,但您实际上只保存了 1 个字符(分号)。此外,我倾向于在一堆逻辑之后喜欢 $apply 方法,而不是将所有内容都包装在其中。如果我对范围做了更多的事情,你要么必须像这样写每一个额外的东西:

$scope.$apply($scope.var1 = newValue1);
$scope.$apply($scope.var2 = newValue2);
$scope.$apply($scope.var2 = newValue3);

我觉得这太过分了,或者你可以使用函数方法:

$scope.$apply(function(){
    $scope.var1 = newValue1;
    $scope.var2 = newValue2;
    $scope.var3 = newValue3;
});

或者直接在需要“应用”的代码之后:

$scope.var1 = newValue1;
$scope.var2 = newValue2;
$scope.var3 = newValue3;
$scope.$apply();

通过始终采用这种方法,您的代码可以轻松转移且可读性强。此外,更少的行并不总是最好的方法。

关于javascript - Angularjs ng-show 基于回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14084932/

相关文章:

javascript - SequelizeJS - 如何为原始查询映射嵌套(急切加载)模型?

javascript - 手动转到上一个状态时 $ionicHistory.backView 的状态不正确

javascript - PHP Javascript - 数组多维错误

javascript - 如何根据 ng-repeat 中两个日期之间的不同来过滤数据?

javascript - 为什么 Angular 日期选择器这么慢?

javascript - AngularJS Controller 未注册

javascript - $rootScope :infdig error in angularjs application

javascript - 动态创建的PHP数组字段不使用mysql将数据保存在表中

javascript - HTML 导入另一个 HTML 文件时无法正确显示

javascript - Jquery window.scrollTo 导致页面卡住