【发布时间】:2016-09-26 21:55:44
【问题描述】:
我是 Angular js 的新手。我已经包含了两个文件,这两个文件分别工作正常 - 我可以向数组添加名称并删除或更新它们,但我的想法是能够从一个文件中获取数组并动态地将其传递给另一个。因为当我切换视图时,数组仍然被存储(直到刷新) 我如何连接这两个 .js 文件,因为这两个模块位于两个单独的文件中,并且这两个视图使两个数组都具有字符串名称。我想要的基本上是从员工模块中调用一个函数(getallDepartments),并从部门模块中获取部门名称数组。而且我知道我不能像 require 或 include 一样使用,但我不需要将数据保存到数据库中,那么这里最好的其他方法是什么?所以我有这个代码:
附言我已经尝试在员工模块中注入部门工厂的依赖项,但由于它不知道该工厂来自哪里,所以这是无用的 - 我无法在另一个脚本中引用该脚本......
employees.js
'use strict';
angular.module('myApp.employees', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/employees', {
templateUrl: 'employees/employees.html',
controller: 'View2Ctrl',
controllerAs:"View2"
});
}])
.factory('EmployeeService', function()
{
var employees = [];
return {
deleteEmployee: function(employee) {
var index = employees.indexOf(employee);
if(index > -1)
{
employees.splice(index,1);
}
},
addEmployee: function(employee) {
employees.push(employee);
},
getallEmployee: function()
{
return employees;
},
getallDepartment: function()
{
console.log("fdfs");
//console.log(DepartmentService.getallDepartments())
return DepartmentService.getallDepartments();
},
updateEmployee: function(employee,newname) {
var index = employees.indexOf(employee);
if(index > -1)
{
employees[index] = newname;
}
}
}
})
.controller('View2Ctrl', function(EmployeeService) {
var vm = this;
vm.employees = EmployeeService.getallEmployee();
vm.addEmployee = function(employee) {
EmployeeService.addEmployee(employee);
}
vm.deleteEmployee = function(employee) {
EmployeeService.deleteEmployee(employee);
}
vm.selectEmployee = function(employee) {
vm.employeeSelected = true;
vm.updateEmployeeName = employee;
}
vm.updateEmployee = function(employee) {
EmployeeService.updateEmployee(vm.employee,vm.updateEmployeeName);
}
//vm.Check = function()
//{
// EmployeeService.getallDepartment();
//}
});
'use strict';
angular.module('myApp.departments', ['ngRoute'])
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/departments', {
templateUrl: 'departments/departments.html',
controller: 'View1Ctrl',
controllerAs: "View1"
});
}])
.factory('DepartmentService', function()
{
var departments = [];
return {
deleteDepartment: function(department) {
var index = departments.indexOf(department);
if(index > -1)
{
departments.splice(index,1);
}
},
addDepartment: function(department) {
departments.push(department);
},
getallDepartments: function()
{
return departments;
},
updateDepartment: function(department,newname) {
var index = departments.indexOf(department);
if(index > -1)
{
departments[index] = newname;
}
}
}
})
.controller('View1Ctrl', function(DepartmentService) {
var vm = this;
vm.departments = DepartmentService.getallDepartments();
vm.addDepartment = function(department) {
DepartmentService.addDepartment(department);
}
vm.deleteDepartment = function(department) {
DepartmentService.deleteDepartment(department);
}
vm.selectDepartment = function(department) {
vm.departmentSelected = true;
vm.updateDepartmentName = department;
}
vm.updateDepartment = function(department) {
DepartmentService.updateDepartment(vm.department,vm.updateDepartmentName);
}
});
这是employees.html
<table
<p></p>
<h1>Update</h1>
<input ng-model="View2.updateEmployeeName" ng-disabled="!View2.employeeSelected">
<button ng-click="View2.updateEmployee(View2.employeeSelected)">UpdateEmployee</button>
<hr>
<table border="1px" style="width: 200px" ng-repeat="employee in View2.employees">
<tr>
<td>{{employee}}</td>
<td><button ng-click="View2.deleteEmployee(employee)">Delete</button></td>
<td><button ng-click="View2.selectEmployee(employee)">Update</button></td>
<td><button ng-click="View2.Check()">Check</button></td>
</tr>
</table>
<hr>
<h1>Create</h1>
<input ng-model="View2.employee">
<button ng-click="View2.addEmployee(View2.employee)">AddEmployee</button>
【问题讨论】:
-
不要将它们视为不同的文件。您在一个应用程序中拥有各种组件。要在组件之间共享数据,请使用服务
-
是的,我在两个组件中都有 .factory,但现在我如何才能从一个组件到达另一个工厂?
标签: javascript jquery angularjs node.js