我是否总是需要注入$ location以在AngularJS中使用它?

时间:2016-04-15 09:52:48

标签: angularjs

我使用角度声明而不使用或注入$scope var,但使用this.声明



 var app = angular.module('myApp', []);
     app.controller('myCtrl', myCtrlFunction); 
                   
     function myCtrlFunction() {
        this.myUrl = "This is myUrl content";
     }

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="myCtrl as vm">
    <p>Here I put my var myUrl:</p>
    <h3>{{vm.myUrl}}</h3>
</div>
&#13;
&#13;
&#13;

它运作正常,但我无法弄清楚如何访问&#39; $ location&#39;所以这在缩小之后起作用

&#13;
&#13;
     var app = angular.module('myApp', []);
         app.controller('myCtrl', myCtrlFunction); 
                       
         function myCtrlFunction() {
            this.myUrl = $location.absUrl();
         }
&#13;
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

    <div ng-app="myApp" ng-controller="myCtrl as vm">
        <p>Here I put my var myUrl:</p>
        <h3>{{vm.myUrl}}</h3>
    </div>
&#13;
&#13;
&#13;

我是否需要更改声明myCtrlFunction()的内容的方式?

2 个答案:

答案 0 :(得分:0)

你需要注入$ location。

 var app = angular.module('myApp', []);
     app.controller('myCtrl', myCtrlFunction); 

     function myCtrlFunction(**$location**) {
        this.myUrl = $location.absUrl();
     }

由于您实际上并未使用$ scope关键字,因此您使用了以前的版本。但是对于$ location,你专门使用它,所以你需要注入它。

答案 1 :(得分:0)

是的,因为它有依赖注入。在当前设置中,控制器要求$ location为全局变量。此外,您需要为参数名称提供一个包含字符串值的数组,因此在通过缩小算法更改参数后,angular仍然知道要注入的内容。

因此,请使用以下任一设置:

var app = angular.module('myApp', []);

app.controller('myCtrl', ['$location', myCtrlFunction]); 

function myCtrlFunction($location) {
    this.myUrl = "This is myUrl content";
}

或:

var app = angular.module('myApp', []);
app.controller('myCtrl', myCtrlFunction); 

function myCtrlFunction($location) {
    this.myUrl = "This is myUrl content";
}
// tell angular what parameters are expected
myCtrlFunction.$inject = ['$location'];

More about dependency injection in Angular