gpt4 book ai didi

javascript - Angular 提供者不工作

转载 作者:行者123 更新时间:2023-11-29 14:47:08 25 4
gpt4 key购买 nike

我正在学习 Angular 中的服务。我尝试了服务和工厂,可以让他们工作,但我无法让 vendor 工作。我也检查了几个SO答案的解决方案,仍然无法让它工作

这是我的提供商:

app.provider('EmployeeService', function EmployeeServiceProvider() {
var list = [{
name: '',
skill: ''
}];

this.$get = function() {
return {
getList: function() {
return list
},
add: function(employee) {
list.push(employee);
}
};
}
})

还有我的 Controller :

app.controller('MainCtrl', function($scope, EmployeeService) {

$scope.employee = {
name: '',
skill: ''
};
$scope.employees = EmployeeService.getList();
$scope.add = function(employee) {
EmployeeService.add(employee);
$scope.employee = {
name: '',
skill: ''
}
}
});

和 app.js

var app = angular.module('myApp', []);

app.config(['EmployeeServiceProvider', function(EmployeeServiceProvider) {
var user = {
name: 'Rob',
skill: 'Hacker'
};
EmployeeServiceProvider.add(user);

}]);

我的 html 是这样的:

<html lang="en" ng-app="myApp">

<head>
<meta charset="UTF-8">
<title>AngularJS app</title>
<script src="js\angular\angular.js"></script>
<script src="app\app.js"></script>
<script src="app\controllers\MainCtrl.js"></script>
<script src="app\services\EmployeeService.js"></script>
</head>

<body>
<div ng-controller='MainCtrl'>
<input type="text" ng-model="employee.name" placeholder="Enter employee name"/>
<input type="text" ng-model="employee.skill" placeholder="Enter employee skill"/>
<button ng-click="add(employee)">Add</button>
<hr>
<table>
<thead>
<tr>
<td>Name</td>
<td>Skill</td>
</tr>
</thead>
<tbody>
<tr ng-repeat="person in employees">
<td>{{person.name}}</td>
<td>{{person.skill}}</td>
</tr>
</tbody>
</table>
</div>
</body>

</html>

我希望在 HTML 中提供值之前先在配置中添加这些值。但我做不到。控制台中也没有任何显示。请告诉我如何正确配置提供程序并在配置中使用它。

最佳答案

问题出在您的 provider 代码中。您的提供商需要返回一个包含 $get 属性的对象。简单地将 $get 添加到 this 是行不通的。在 $get 中,您需要返回 Controller 使用的函数(即 add()getList())

您需要在两个地方保留add 函数:

首先,就在提供者的return{ }中(作为$get的兄弟),因为您在中使用它配置函数。

app.config(['EmployeeServiceProvider', function(EmployeeServiceProvider) {
var user = {
name: 'Rob',
skill: 'Hacker'
};

EmployeeServiceProvider.add(user); //<-- Here

}]);

其次,您需要将 add 函数保留在 $get 的返回值 中,因为您正在 Controller 中使用它。

$scope.add = function(employee) {
EmployeeService.add(employee); <-- Here
$scope.employee = {
name: '',
skill: ''
}
}

这是您的提供商的完整代码:

app.provider('EmployeeService', function EmployeeServiceProvider() {
var list = [{
name: '',
skill: ''
}];

return{
add: function(employee) { //This is for Config's visibility
list.push(employee);
},
$get:function(){
return{
add: function(employee) { // This is for controller's visibility
list.push(employee);
},
getList: function() {
return list
}
}
}

}
})

您还可以将方法($getadd)绑定(bind)到this 而不是返回一个单独的对象

app.provider('EmployeeService', function EmployeeServiceProvider() {
var list = [{
name: '',
skill: ''
}];

this.add= function(employee) {
list.push(employee);
}
this.$get = function() {
return {
getList: function() {
return list
},
add: function(employee) {
list.push(employee);
}
};
}

})

这是工作 plunkr

关于javascript - Angular 提供者不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31438481/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com