0

我正在学习提供者。在我会使用的通用控制器上

modu.controller("thecontrol", [function()
{
this.something = "Hello";
]});

并在 HTML

<div ng-controller="thecontrol as ctrl">
{{ ctrl.something }}
</div>

但是......我正在尝试使用此代码进行相同的操作,而且我真的做不到,即使我尝试了所有我“知道”的方式。

这是代码...

我想要的是?使用 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>

是的......它有效,但我想知道是否可以用这个来做到这一点。

谢谢!

4

1 回答 1

1

我认为这是因为当您不命名控制器时,{{}}必须是范围,因为 this 和$scope可能会根据上下文而有所不同。例如,在 ng-repeat 中,1 个控制器但本质上是 2 个作用域。

像你在第一个上所做的那样命名控制器,ctrl 为showingName。制作变量this.theNameIs然后使用 { { ctrl.theNameIs }}

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

有关$scopethis的更多信息:

AngularJS 控制器中的“this”与 $scope

于 2015-11-19T00:41:44.153 回答