在带有提供程序的控制器上使用这个代替 $scope
Use this instead $scope on controller with provider
我正在了解提供商。在一个普通的控制器上,我会使用
modu.controller("thecontrol", [function()
{
this.something = "Hello";
]});
以及 HTML
<div ng-controller="thecontrol as ctrl">
{{ ctrl.something }}
</div>
但是...我尝试用这段代码做同样的事情,但我真的做不到,即使我尝试了我 "know".
的所有方法
这是代码...
我想要什么? 使用 THIS 而不是 $scope
<div ng-app="myApp" ng-controller="showingName">
{{theNameIs}}
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module("myApp", []);
myApp.provider("showingName", function() {
this.name = "Luis";
this.$get = function() {
var name = this.name;
return {
showName: function() {
return name;
}
}
};
this.setName = function(name) {
this.name = name;
};
});
myApp.config(function(showingNameProvider){
showingNameProvider.setName("Juan");
});
myApp.controller("showingName", function($scope, showingName)
{
$scope.theNameIs = showingName.showName();
});
</script>
是的......它有效,但我想知道是否可以用这个来做到这一点。
谢谢!
我认为这是因为当您不命名控制器时,{{ }} 必须是作用域,因为 this 和 $scope 可以根据上下文不同。比如说在一个 ng-repeat 中,1 个控制器实际上是 2 个作用域。
像第一次一样给控制器命名,ctrl as showingName。使变量 this.theNameIs 然后使用 {{ ctrl.theNameIs }}
此外,我个人认为您不应该将控制器和提供者命名为相同的名称,感谢这可能只是一个示例。
有关 $scope 和 this 的更多信息:
'this' vs $scope in AngularJS controllers
我正在了解提供商。在一个普通的控制器上,我会使用
modu.controller("thecontrol", [function()
{
this.something = "Hello";
]});
以及 HTML
<div ng-controller="thecontrol as ctrl">
{{ ctrl.something }}
</div>
但是...我尝试用这段代码做同样的事情,但我真的做不到,即使我尝试了我 "know".
的所有方法这是代码...
我想要什么? 使用 THIS 而不是 $scope
<div ng-app="myApp" ng-controller="showingName">
{{theNameIs}}
</div>
<script src="angular.js"></script>
<script>
var myApp = angular.module("myApp", []);
myApp.provider("showingName", function() {
this.name = "Luis";
this.$get = function() {
var name = this.name;
return {
showName: function() {
return name;
}
}
};
this.setName = function(name) {
this.name = name;
};
});
myApp.config(function(showingNameProvider){
showingNameProvider.setName("Juan");
});
myApp.controller("showingName", function($scope, showingName)
{
$scope.theNameIs = showingName.showName();
});
</script>
是的......它有效,但我想知道是否可以用这个来做到这一点。
谢谢!
我认为这是因为当您不命名控制器时,{{ }} 必须是作用域,因为 this 和 $scope 可以根据上下文不同。比如说在一个 ng-repeat 中,1 个控制器实际上是 2 个作用域。
像第一次一样给控制器命名,ctrl as showingName。使变量 this.theNameIs 然后使用 {{ ctrl.theNameIs }}
此外,我个人认为您不应该将控制器和提供者命名为相同的名称,感谢这可能只是一个示例。
有关 $scope 和 this 的更多信息:
'this' vs $scope in AngularJS controllers