如何根据服务中的变量设置ng-show

时间:2016-02-05 04:42:40

标签: angularjs

我不确定我应该在标题上加注什么,如果标题令人困惑,请提前抱歉。我对AngularJS也不是很好。

我们说我有一个工厂"用户"它包含一个布尔值"激活"。我有一条"消息"注入"用户"。

的控制器
angular.module('message', [])
    .controller('message', function($rootScope, $scope, $http, User){

        //some functions
        ...
        $scope.message = 'Helloworld';
        console.log('In Message Controller');
        console.log('debug message, User activated: ' + User.activated);    
    })

我想在message.html中使用ng-show,例如

<div>
    <p>{{message}}</p>
</div>
<div ng-show="User.activated">
    <p>Debugging: This only shows up if activated is true</p>
</div>

但是调试信息并没有显示出来。

无论如何我能做到这一点吗?或者,如果我不应该做这样的事情,有人可以建议我另一种方式从&#34;用户&#34;厂 和ng-show一起使用?我想阻止使用$ scope,例如

$scope.activated= function(){
    return User.activated;
}

在控制器上,因为这样如果我将来需要再创建几个控制器,我将不得不在控制器中设置$ scope.activated。

2 个答案:

答案 0 :(得分:2)

确实,您需要使用该服务。

如果User.activated字段应在所有控制器中均等执行,则必须使用单例。

如果User.activated方法取决于控制器中的值,则必须使用服务实例。

jsfiddle上的实例。

    angular.module('ExampleApp', ['use', 'ngMessages'])
  .controller('ExampleOneController', function($scope, ReuseService) {
    //We need do copy, because ReuseService is singleton 
    $scope.reusable = angular.copy(ReuseService);
    $scope.singleton = ReuseService;
  })
  .controller('ExampleTwoController', function($scope, ReuseService) {
    //We need do copy, because ReuseService is singleton 
    $scope.reusable = angular.copy(ReuseService);
    $scope.singleton = ReuseService;
  })
  .service('ReuseService', function() {
    return {
      varReuse: 'im not using yet',
      imReuseFunction: function(val) {
        this.varReuse = val;
      }
    }
  });

和HTML

<div ng-app="ExampleApp">
  <div ng-controller="ExampleOneController">
    <h3>
      ExampleOneController
    </h3>
    <form name="ExampleForm">
      Reusable variable: {{reusable.varReuse}}
      <br>Reusable variable singleton: {{singleton.varReuse}}
      <br>
      <button ng-click="reusable.imReuseFunction('one')">
        Reuse me
      </button>
      <button ng-click="singleton.imReuseFunction('one')">
        Reuse me singleton
      </button>
    </form>

  </div>
  <hr>
  <div ng-controller="ExampleTwoController">
    <h3>
      ExampleTwoController
    </h3>
    <form name="ExampleForm">
      Reusable variable: {{reusable.varReuse}}
      <br>Reusable variable singleton: {{singleton.varReuse}}
      <br>
      <button ng-click="reusable.imReuseFunction('two')">
        Reuse me
      </button>
      <button ng-click="singleton.imReuseFunction('two')">
        Reuse me singleton
      </button>
    </form>

  </div>
</div>

答案 1 :(得分:1)

您可以在$ rootScope中设置已激活,这样每个控制器都可以访问它,如下所示:

在您的控制器中:

<div>
    <p>{{message}}</p>
</div>
<div ng-show="$root.user.activated">
    <p>Debugging: This only shows up if activated is true</p>
</div>
你的HTML中的

$calendarListNew=new stdClass();
$calendarListNew->items=new stdClass();

$i=1;
foreach ($calendarList['items'] as $key => $value) {
     $calendarListNew->items->$i = $calendarList['items'][$key]['id'];
     $i++;
}