gpt4 book ai didi

angularjs - 纯 Controller 对象

转载 作者:行者123 更新时间:2023-12-02 23:03:47 24 4
gpt4 key购买 nike

在 AngularJS 中,Controller 本身是一个由 Javascript 构造函数定义的对象,并且该构造函数是对 .controller 方法的回调.



var myapp=angular.module('scopeExample', []);
myapp.controller('MyController',function MyController($scope){
$scope.name="john";
this.num=700;
});

在上面的示例中,MyController 是构造函数,它创建具有一个属性的Controller 对象 (num)。我对此有三个疑问:

  • 实际上,这种情况下Controller对象有什么用呢?
  • 它是否还有一些不可见的属性,并且可以从 Angular 外部访问吗?
  • 它如何与其作用域互连,而作用域又是另一个对象?

由于 controller as 语法创建了一个 Controller 对象,该对象是 Controller 范围的属性,因此易于访问,因此我遇到了以下查询,例如

<div ng-app="scopeExample" ng-controller="MyController as ctrl">
<input id="box" ng-model="ctrl.num"> equals {{ ctrl.num }}
</div>

<script>
angular.module('scopeExample', [])
.controller('MyController', [function () {
this.num=12;
}]);
</script>

var x=angular.element('#box').scope().ctrl; //x is the controller object itself

最佳答案

1.a。 在这种情况下,Controller 对象有什么用?

这个例子没有什么特别的,Angular 是一个 MVC 框架(或者你想使用的描述几乎相同事物的任何其他流行词), Controller 的职责是响应 View 事件,相应地更新模型并执行业务逻辑任务(您可以选择在哪里实际实现逻辑,在 Controller 本身中或使用服务)。

当然,在这个例子中 Controller 是毫无用处的,因为你没有逻辑,只有两个属性。

1.b。指定 ctrl-as 语法,在您的示例中,您将“scope”注入(inject)到 Controller 中并添加了属性($scope.name),当您使用 Controller 时,建议您避免使用范围,除非您有义务这样做所以。 (例如 $watch、家长...)

2.a。 它还有一些不可见的属性吗?

不,它没有任何不可见的属性,您可以使用以下代码轻松地自行检查:

.controller('MyController', function () {
window.DoesThisControllerHaveInvisibleProps = this;
});

2.b. 可以从 Angular 外部访问吗?

我不确定我是否完全理解你所说的“外部 Angular”的含义,如果是的话,这里是一个可以从“外部”访问 Controller obj 的示例:

class MyController {
static foo() {
console.log('hello!');
}
}

myapp.controller('MyController', MyController);
// maybe somewhere else in that module
MyController.foo();

3.它如何与其作用域(又是另一个对象)互连?

正如您所说,当使用 Controller 作为语法时, Angular 正在初始化 Controller 并将其放在 $scope 上,以便可以在模板中访问它。

$scope 只是不必要的发光,你应该避免使用它。我的看法就像是有 Angular 的植入细节,当迁移到 ng-2 时,你会发现不再有范围了。

如果您对有关 Angular 中的 $scope 和 Controller 究竟如何工作的更详细信息感兴趣,我建议您 have a look at

关于angularjs - 纯 Controller 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36030944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com