我正在尝试仅在<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>
此代码段在HTTP
和HTTPS
中均无效。
我很确定问题在于访问window
对象。
我该如何解决这个问题?
修改:请注意<p>
没有任何控制器。
答案 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无效,但这是您可以尝试的解决方案 -
在控制器内使用比较运算符,然后在可以在控制器范围外访问的根镜中添加模型 -
参考下面的代码片段,希望这能解决您的问题 -
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;