javascript - $范围变量,ng-hide/show

标签 javascript angularjs

我认为我遗漏了有关 $scope 的一些内容。我有一些 ng-hide/shows 在顶部导航中有一个变量。在通过应用程序配置功能链接到 Controller 的 ng-view 内部。我的导航代码位于“NavController”中。但是我在导航之外的 View 中有一个页面,该页面链接到运行该代码的“AppointmentController”,该代码负责设置约会。完成一些步骤后,您就可以登录了,此代码位于 AppointmentController View 内,但我已经这样做了 -

编辑 - 我刚刚意识到,下面的输入必须位于单独的 Controller 中。当我将其附加到 NavController 时,我希望 apptLogin() 更改主视图数据,这些数据全部位于单独的 Controller 中。

<input ng-controller="NavController" ng-click="apptLogin(email)" value="Login and Continue" class="btn btn-default pull-left" >

$scope.apptLogin = function(email){
  $http({
    method: 'POST',
    data: {email: email},
    url: '/common_includes/ajax/validateUser.php',
  }).then(function successCallback(response) {
      if(response.data.status == 0){
        var login_message = '<div class="alert alert-danger" role="alert">'+response.data.message+'</div>';
        $('#login_modal .modal-body').html(login_message);
        $('#login_modal').modal();
        $interval(function(){
          $('#login_modal').modal('hide');
        }, 1400, 1);
      }
      if(response.data.status == 1){
        $scope.appt_history = true;
        console.log($scope);
        var login_message = '<div class="alert alert-success" role="alert">'+response.data.message+'</div>';
        $('#login_modal .modal-body').html(login_message);
        $('#login_modal').modal();
        $interval(function(){
          $scope.click_login = false;
          $('#login_modal').modal('hide');
        }, 1400, 1);
      }

代码全部运行。这里的这一行应该切换隐藏/显示,但事实并非如此。 -

$scope.appt_history = true;

如果我感到困惑,因为如果在上述行之后console.log($scope),我会看到所有NavController变量,并且$scope.appt_history确实== true,但隐藏/显示没有改变。我在这里缺少什么?

最佳答案

简单的方法是将 $rootScope 注入(inject)两个 Controller 并将共享数据属性放置在那里而不是 $scope 中,但这不是推荐的做法。

但是,我建议使用服务。它们编写起来很简单,并且使跨 Controller 共享数据变得轻而易举,而不必污染根范围。

基本上,您首先创建服务并将要共享的属性添加到其构造函数

app.service('sharingSvc', function() {
  this.sharedValue = 'initialized';
});

现在,您可以将该服务注入(inject)到需要访问共享属性的 Controller 中。

app.controller('pageOneCtrl', function($scope, sharingSvc) {
  $scope.pageOneSare = sharingSvc;
});

Here is a complete, but very basic Plnkr该图展示了如何使用服务在多个 Controller 和 View 之间共享数据。这应该足以让您开始。希望这对您有所帮助!

关于javascript - $范围变量,ng-hide/show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37240237/

相关文章:

angularjs - 使用 grunt 时找不到模块 'karma'

java - 如何使用 Angular 方法将数据检索到 selenium java 脚本中

javascript - 从e文件夹加载图像并以html显示它们

javascript - jQuery $(this) 不起作用

angularjs - Firebase 3.身份验证不持久

javascript - 将对象从 ng-repeat 传递到 templateURL 属性

javascript - 如何在另一个模块中动态注入(inject)模块?

java - 在 Webdriver selenium 上激活 javascript

javascript - Vue JS,如何使 axios 请求 API 在加载 HTML DOM 组件之前首先运行?

javascript - 如何使用javascript逐字反转字符串中的单词?