在带有提供程序的控制器上使用这个代替 $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 }}

此外,我个人认为您不应该将控制器和提供者命名为相同的名称,感谢这可能只是一个示例。

有关 $scopethis 的更多信息:

'this' vs $scope in AngularJS controllers