如何使用“继承”从基本控制器继承;控制器为“;语法
How to inherit from base controller using "controller as" syntax?
以下是一个片段,演示如何使用$controller
和$scope
:从基本控制器继承
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope, $controller) {
$controller('BaseCtrl', {
$scope: $scope
})
});
app.controller('BaseCtrl', function($scope) {
$scope.name = 'World';
});
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<title>AngularJS</title>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl">
<p>Hello {{name}}!</p>
</body>
</html>
如何使用"controller as"语法进行相同操作?这个片段展示了我想要的东西,但它不起作用:
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope, $controller) {
$controller('BaseCtrl', {
$scope: $scope
})
});
app.controller('BaseCtrl', function() {
this.name = 'World';
});
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<title>AngularJS</title>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl as main">
<p>Hello {{main.name}}!</p>
</body>
</html>
您可以使用controller作为语法(或者只使用$controller
提供程序返回的ctrl实例)并使用angular.extend
。但我不认为还有另一种隐含角度的方法可以做到这一点,因为"controller as"语法最终将控制器实例作为指定为别名的属性名称放置在相应的作用域上。但这实际上不是继承,而是利用对象扩展。
var ctrl = $controller('BaseCtrl as base', { //You don't really need to use as syntax here though
$scope: $scope
});
angular.extend(this, ctrl);
//or
$controller('BaseCtrl as base', { //You don't really need to use as syntax here though
$scope: $scope
});
angular.extend(this, $scope.base); //With as syntax
或者,您可以在控制器构造函数本身的实现级别使用原型继承。有很多语法糖可用,typescript的extends
还有另一个简单的例子。
var app = angular.module('app', []);
app.controller('MainCtrl', function($scope, $controller) {
var ctrl = $controller('BaseCtrl as base', {
$scope: $scope
});
angular.extend(this, ctrl);
});
app.controller('BaseCtrl', function() {
this.name = 'World';
});
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<title>AngularJS</title>
<script>
document.write('<base href="' + document.location + '" />');
</script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<script src="app.js"></script>
</head>
<body ng-controller="MainCtrl as main">
<p>Hello {{main.name}}!</p>
</body>
</html>
相关文章:
- 从控制器继承了隔离的作用域以生成可重用的指令
- 当使用控制器作为语法时,如何从父指令继承属性
- 移动和桌面视图的角度控制器继承
- 作用域变量未从状态父控制器继承到子控制器
- 角控制器作为vm继承
- AngularJS中的控制器/指令继承
- Angular js 从一个控制器从另一个控制器继承属性
- 使用 Restangular 保持 CRUD 干燥:指令、继承控制器或包装服务
- $scope不会使用点表示法从控制器注入/继承到指令
- 角度指令控制器作用域继承
- 如何使用“继承”从基本控制器继承;控制器为“;语法
- AngularJS中具有ui视图的根控制器的继承变量
- Angularjs的Typescript控制器继承和依赖注入
- Angular UI中的子视图路由器和控制器继承
- 控制器继承在AngularJS中是一个好习惯吗?
- 控制器继承在angularjs中是如何工作的
- 当我使用别名时,AngularJS中的控制器继承不起作用
- 有没有一种方法可以让子控制器继承服务呢?从其父节点获取
- 角度控制器继承作用域问题
- AngularJS中的路由更改和控制器继承