Javascript 如何从不同文件的指令调用工厂?
我第一次用Angular JS开发,我正在编辑我朋友的应用程序。我会从另一个文件中的指令调用工厂。以下是相关文件的代码: 用户工厂.jsJavascript 如何从不同文件的指令调用工厂?,javascript,angularjs,controller,factory,directive,Javascript,Angularjs,Controller,Factory,Directive,我第一次用Angular JS开发,我正在编辑我朋友的应用程序。我会从另一个文件中的指令调用工厂。以下是相关文件的代码: 用户工厂.js (function() { 'use strict'; angular.module('myApp.services').factory('currUserService', function() { var curruser = ''; var self = this; return { setCurrUser:
(function() {
'use strict';
angular.module('myApp.services').factory('currUserService', function() {
var curruser = '';
var self = this;
return {
setCurrUser: function(user) {
self.curruser = user;
},
getCurrUser: function() {
return self.curruser;
},
}
});
}());
(function() {
'use strict';
angular.module('myApp.directives').directive('mainpageUsersBox', function() {
return {
restrict: 'E',
replace: true,
scope: {
users: '=users'
},
templateUrl: 'views/templates/mainpage-users-box.directive.html',
controller: controller,
controllerAs: 'ctrl'
};
});
function controller($scope) {
var ctrl = this;
ctrl.openProfile = function(user) {
ctrl.currUserService.setCurrUser(user);
};
}
controller.$inject = ['$scope'];
}());
主页用户框.js
(function() {
'use strict';
angular.module('myApp.services').factory('currUserService', function() {
var curruser = '';
var self = this;
return {
setCurrUser: function(user) {
self.curruser = user;
},
getCurrUser: function() {
return self.curruser;
},
}
});
}());
(function() {
'use strict';
angular.module('myApp.directives').directive('mainpageUsersBox', function() {
return {
restrict: 'E',
replace: true,
scope: {
users: '=users'
},
templateUrl: 'views/templates/mainpage-users-box.directive.html',
controller: controller,
controllerAs: 'ctrl'
};
});
function controller($scope) {
var ctrl = this;
ctrl.openProfile = function(user) {
ctrl.currUserService.setCurrUser(user);
};
}
controller.$inject = ['$scope'];
}());
mainpage.html
[...]
<mainpage-users-box users="ctrl.users"></mainpage-users-box>
[...]
[…]
[...]
正如您在第二个文件中看到的,我想使用.setCurrUser(user)
方法,但我得到了以下错误:类型错误:无法在Chrome控制台中读取未定义的属性“setCurrUser”
你能帮我找出原因吗?看起来你根本没有注入服务:
// Where's the service?
function controller($scope) {
var ctrl = this;
ctrl.openProfile = function(user) {
ctrl.currUserService.setCurrUser(user);
};
}
// Where's currUserService?
controller.$inject = ['$scope'];
如果您将控制器改为此,这是否不起作用
function controller(currUserService) {
var ctrl = this;
ctrl.openProfile = function(user) {
ctrl.currUserService.setCurrUser(user);
};
}
controller.$inject = ['currUserService'];
您似乎正在使用编写控制器的
controllerAs
风格。在这种情况下,不需要注入$scope
,除非添加$watchs
了解您如何在html中包含这些文件会很有帮助。我添加了
和
,您可能想看看