在模块中,控制器可以从外部控制器继承属性:
var app = angular.module('angularjs-starter', []);
var ParentCtrl = function ($scope, $location) {
};
app.controller('ChildCtrl', function($scope, $injector) {
$injector.invoke(ParentCtrl, this, {$scope: $scope});
});
Run Code Online (Sandbox Code Playgroud)
示例:死链接:http://blog.omkarpatil.com/2013/02/controller-inheritance-in-angularjs.html
模块内的控制器也可以继承兄弟姐妹吗?
var app = angular.module('angularjs-starter', []);
app.controller('ParentCtrl ', function($scope) {
//I'm the sibling, but want to act as parent
});
app.controller('ChildCtrl', function($scope, $injector) {
$injector.invoke(ParentCtrl, this, {$scope: $scope}); //This does not work
});
Run Code Online (Sandbox Code Playgroud)
第二个代码不起作用,因为$injector.invoke需要一个函数作为第一个参数,并且找不到引用ParentCtrl.
是否可以在提供者方法中进行DI?
在这个例子中
angular.module('greet',[])
.provider('greeter',function() {
this.$get=function() {
};
})
.service('greeterService',function($http){
console.log($http);
})
;
Run Code Online (Sandbox Code Playgroud)
注入$http服务似乎是正确的实现,但它在提供程序方法中不起作用并且它会引发错误:
未知提供商:$ http
提供者方法是否与DI一起注入服务?
我在尝试将$ scope和$ http注入控制器时提出了类似的问题.无法在Angular.js控制器中调用未定义的方法'jsonp'.现在我试图通过将代码移动到控制器内的函数来稍微重构该代码.我遇到类似的问题,似乎无法掌握Angular中依赖注入的机制.以下是我的新代码.$ scope和$ http都是未定义的.我尝试做的是在didSelectLanguage()触发时发出一个http请求,并将结果数据分配给来自父控制器的$ scope中的"image"变量.有人可以告诉我在这个例子中依赖注入应该如何工作?
angular.module('myApp.controllers', []).
controller('ImagesCtrl', ['$scope', '$http', function ($scope, $http) {
$scope.didSelectLanguage=function($scope, $http) {
console.log($scope);
$http.jsonp('http://localhost:3000/image?quantity=1&language='+this.language+'&Flag=&callback=JSON_CALLBACK')
.success(function(data){
$scope.image = data;
});
}
}])
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Angular的"装饰器"功能来为某些指令添加功能.假设我的指令名称是myDirective.我的代码看起来像这样:
angular.module('app').config([
'$provide', function($provide) {
return $provide.decorator('myDirective', [
'$delegate', '$log', function($delegate, $log) {
// TODO - It worked! Do something to modify the behavior
$log.info("In decorator");
}
]);
}
Run Code Online (Sandbox Code Playgroud)
]);
我一直收到这条消息:
Uncaught Error: [$injector:unpr] Unknown provider: myDirectiveProvider from app
Run Code Online (Sandbox Code Playgroud)
在我的能力范围内,指令在装饰器函数运行时已经注册.任何见解将不胜感激!
我一直在修改AngularJS,我已经建立了一小部分指令和服务,我想把它打包成一个JS文件,以便我可以在任何地方使用它们.
我有一些网站特定的设置,我的模块将需要API调用等等.我只是想知道Angular制作可配置模块的方法是什么.显然,我不想为每个网站修改我的可重用JS文件,因为这样做会破坏它的目的.看到每个网站的值保持不变,将每个函数调用作为参数传递它们似乎是一件非常麻烦的事情,而且我宁愿尽可能远离全局变量.
我已经搜索了很多问题以寻找我所寻求的答案,而我到目前为止找到的最接近的模式是让我的可重用模块依赖于一个名为"settings"之类的未包含的模块,然后定义该模块.页面的JS文件,允许可重用模块从中提取值.这是一个展示我的意思的例子.
这似乎是我的倒退.这有点像从全局值中获取函数pull值而不是将值作为参数传递.
这真的是最好的方法吗,还是有替代方案?
我是AngularJS的新手.我一直在阅读由Pawel Kozlowski和Peter Bacon Darwin 撰写的关于AngularJS掌握Web应用程序开发的优秀书籍.但是,我对某些概念仍然有些模糊,因此我决定逐行浏览他们的示例应用程序,以便更好地了解AngularJS在实际应用程序中的使用方式.
在某些地方,我看到我在他们的书中没有解释的符号,也没有在API文档中看到.我想知道是否有人可以对此有所了解,如上面链接的项目的/client/src/app/projectsinfo/projectsinfo.js文件中所示:
angular.module('projectsinfo', [], ['$routeProvider', function($routeProvider){
...
}]);
Run Code Online (Sandbox Code Playgroud)
我对angular.module方法的理解是它接受三个参数:
但是,在上面的例子中,对于第三个参数,正在提供一个数组,数组中的第一个元素是一个字符串(我假设一个提供者?),然后是一个函数.谁能解释一下这里发生了什么?