Angularjs范围不起作用

Posted

技术标签:

【中文标题】Angularjs范围不起作用【英文标题】:Angularjs scope not working 【发布时间】:2015-11-23 10:41:25 【问题描述】:

我正在使用基本的 angular.js 概念来显示和隐藏 div。由于某些原因,我无法使其工作。 在上传文件时,我根据 registerStart 值显示一个 div 'myFormSpinner'。我正在创建一个电话间隙应用程序。

有人可以帮我找出问题所在。除了显示/隐藏 div 一切正常。下面是sn-p的代码:

 <div class="row" ng-controller="RegisterCtrl">  
 <div id="myFormSpinner"  ng-show="registerStart"> 
     <img src="img/ajax-loader.gif"> 
 </div> 
 <div class="col-md-8"> 
     <form class="ng-pristine ng-invalid ng-invalid-required" style="margin-top:5%;"> 
           <div class="col-md-6"> 
                  <input class="form-control " type="text" ng-model="registerData.Email" id="Email" name="Email" required placeholder="Email"> 
             </div> 
                <div class="col-md-offset-1 col-md-10 "> 
                   <input type="submit" ng-click="register()" value="Register" class="btn btn-default btn-primary"> 
                </div> 
     </form> 
 </div> 

event.controller('RegisterCtrl',    ['$scope', '$state', '$q', '$http', 'eventService', 'authService', '$stateParams', '$rootScope', 'tokenService', 'imageService', 'spinnerService', 'appBackgroundService', 
function ($scope, $state, $q, $http, eventService, authService, $stateParams, $rootScope, tokenService, imageService, spinnerService, appBackgroundService)  
var userNumber = 0; 
$scope.mediaUploadStart = false; 
$scope.eventId = $state.params.id; 

 $scope.register = function ()  
     $scope.registerStart = true; 
     console.log('scope.Pic=' + $scope.pic); 
     if ($scope.registerData.Email)  

         spinnerService.show('myFormSpinner'); 
         $scope.mediaUploadStart = true; 
         var paramOptions =  
             eventId: $state.params.id, 
             email: $scope.registerData.Email, 
             fb: , 
             number: userNumber, 
             provider: "Form" 
         ; 
         uploadPicAndData(paramOptions).then(function (result)  
             var data = JSON.parse(result); 
             $scope.registerStart = false; 
             appBackgroundService.disableBackgroundMode(); 
         , 
             function (error)  
                 spinnerService.hide('myFormSpinner'); 
                 $scope.registerStart = false; 
                 appBackgroundService.disableBackgroundMode(); 
             ); 
         $scope.mediaUploadStart = false; 
         spinnerService.hide('myFormSpinner'); 
      
          ; 
 ])

【问题讨论】:

我不习惯这种语法,我推荐这个github.com/johnpapa/angular-styleguide。尝试将 $scope.registerStart 放在 register 函数之外,然后在函数内部切换它。 【参考方案1】:

您正在将 $scope 元素设置为异步模式。 摘要循环无法确定已在异步模式下对范围元素进行了更改。

您应该使用 $apply 来激活摘要循环。

$scope.$apply(function ()  $scope.registerStart = false; );

在此处阅读有关 $apply 的更多信息:http://jimhoskins.com/2012/12/17/angularjs-and-apply.html

【讨论】:

以上是关于Angularjs范围不起作用的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 指令 DOM 操作不起作用

一些赋值运算符在 AngularJS 表达式中不起作用.. 为啥不呢?

Angularjs引导下拉菜单不起作用

组件绑定不起作用:Angularjs

AngularJS:ng-keypress 不起作用

angularjs提交按钮不起作用