我正在尝试从指令函数访问父控制器范围。当我尝试获取它的值时,$scope.$parent它会返回该对象。但是当我尝试从该对象访问任何变量时,它会返回Undefined。
app.controller('myCtrl', function ($scope, $http, $timeout) {
$scope.init = function(){
$http.get('url.php').success(function(data){
$scope.assignmentInfo = data.record;
});
};
});
app.directive('getInfo', [function(){
return {
restrict: 'A',
scope:{
data:'=',
title: '='
},
link:function(scope, elem, attrs){
scope.$watch('data.visible', function(val){
// do something
});
},
controller: function($scope) {
console.log($scope.$parent); // return an object
console.log($scope.$parent.assignmentInfo); // return undefined
},
templateUrl: 'template.html'
};
}]);
Run Code Online (Sandbox Code Playgroud)
首先console.log($scope.$parent)返回以下输出:

但$scope.$parent.assignmentInfo返回underfined
我如何访问assignmentInfo?
我有两个不同的模块,第一个包含控制器的第二个指令。
基本上,我希望directive在我的渲染view。但是,随着modules对directive和controller是不同的,它给错误。
如果我给的相同,module那么我希望为所有控制器提供服务的通用模块可以解决我的问题。
controller
angular.module('SlamModuleCtrl')
.controller('SlambookExt',['$scope','$route','SlambookCollection', function($scope,$route) {
console.log("slam controller")
}]);
Run Code Online (Sandbox Code Playgroud)
Directive
angular.module('Genericmodule')
.directive('appVersion', ['version', function (version) {
return {
restrict: 'E',
template: '<h1>version1</h1>'
}
}])
Run Code Online (Sandbox Code Playgroud)
View
<div ng-controller="SlambookExt">
<app-version>1</app-version>
</div>
Run Code Online (Sandbox Code Playgroud) dependency-injection angularjs angular-directive angular-controller
我有以下 html(示例)
<div ng-controller='ctrl-1'>
<form>
<input type='text' ng-model='name'/>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)
和 js 文件为:
app.controller('ctrl-1',function($scope){
$scope.name = 'john';
});
app.controller('ctrl-2',function($scope){
/*
Here I want to change value of 'name' field which is in 'ctrl-1'
*/
});
Run Code Online (Sandbox Code Playgroud)
如何在 angular js 中实现这一点?
我有一个听起来可能很愚蠢的场景,但是我被困住了,试图理解是什么导致了它不起作用。
我有一个现在有三个模块的角度应用程序
var app = angular.module('mainApp', ['ngRoute']); //parent module
var reviewModule = angular.module('reviewModule', ['mainApp']); //child 1
var searchmodule = angular.module('searchmodule', ['mainApp']); //child 2
Run Code Online (Sandbox Code Playgroud)
我已经在我的父模块(即mainApp)中设置了一些配置和默认字符串,我希望在其所有子模块中使用它。
另一方面,我的reviewModule和searchmodule(子模块)具有单独的控制器和服务,这些控制器和服务在不同的路线上使用。现在,问题来了,当我想将一个模块的服务用于另一个模块时,例如,如果我执行以下操作
var searchmodule = angular.module('searchmodule', ['mainApp', 'reviewModule']);
Run Code Online (Sandbox Code Playgroud)
在我的搜索模块控制器中使用reviewModule服务时,出现一个异常提示
Error: $injector:modulerr Module Error
Failed to instantiate module searchmodule
Run Code Online (Sandbox Code Playgroud)
两个子模块都具有相同的父模块,我想将一个子模块用于另一个子模块,并且不明白为什么会收到此异常。
更新:
我什至尝试使用以下行进行模块声明
var searchmodule = angular.module('searchmodule', ['reviewModule']);
Run Code Online (Sandbox Code Playgroud)
但这也会引起异常。
angularjs angularjs-scope angular-services angular-controller angular-module
angularjs ×4