无法在没有控制器

时间:2015-10-14 14:44:10

标签: angularjs

我正在尝试仅在<p>协议中显示HTTP

这是我到目前为止所做的:

angular
.module('myApp',[])
.controller('myCtrl', ['$scope', '$window', function($scope, $window){

  $scope.name = 'Superhero';

  console.log('$window.location.protocol = ' + $window.location.protocol); // just checking

}]);
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>

<div ng-app="myApp">

  <p ng-if="window.location.protocol === 'http:'">This needs to be shown in HTTP only.</p> <!-- doesnt work with $window either -->

  <div ng-controller="myCtrl">
    Hello, {{name}}!
  </div>

</div>

此代码段在HTTPHTTPS中均无效。

我很确定问题在于访问window对象。

我该如何解决这个问题?

修改:请注意<p>没有任何控制器。

2 个答案:

答案 0 :(得分:2)

因为在表达式中只能使用范围属性。那是how they work。它是

$scope.$root.protocol = $window.location.protocol;

<p ng-if="protocol  === 'http:'">This needs to be shown in HTTP only.</p>

答案 1 :(得分:1)

不确定为什么$ window无效,但这是您可以尝试的解决方案 -

在控制器内使用比较运算符,然后在可以在控制器范围外访问的根镜中添加模型 -

参考下面的代码片段,希望这能解决您的问题 -

&#13;
&#13;
   angular
.module('myApp',[])
.controller('myCtrl', ['$scope', '$window','$rootScope', function($scope, $window,$rootScope){

  $scope.name = 'Superhero';
  $rootScope.httpOnly = $window.location.protocol === 'http:'; 

}]);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="myApp">

  <p ng-if="$root.httpOnly">Outside Controller</p>

  <div ng-controller="myCtrl">
    Hello, {{name}}!
  </div>

</div>
&#13;
&#13;
&#13;