当我在我的投资组合中选择一个项目时,我有路由/portfolio/:workName
。在我的控制器中,我想将$scope.work
设置为我根据workName选择的项目。这就是我到目前为止所拥有的:
app.factory('Works', function(){
var Works = {}
Works.projects =[
{
name : "ProjectOne",
string : "stuff",
{
name : "ProjectTwo",
string : "more stuff",
},
{
name : "ProjectThree",
string : "stuff",
}
];
Works.findByName = function(name) {
Works.projects.forEach(function(work) {
if(work.name == name) {
return work;
}
});
}
return Works;
})
app.controller("ProjectController", function ($scope, Works, $routeParams) {
$scope.work = Works.findByName($routeParams.workName);
});
但是,在调试器中,尽管$routeParams.workName
返回" ProjectOne",Works.findByName($routeParams.workName)
返回undefined。
答案 0 :(得分:2)
您的代码问题是forEach
为not returning a value(您不会以findByName
方法和the return value of forEach
is undefined
返回结果,而只是执行比较。您可以按照以下方法修改方法,或使用filter()
方法(Works.findByNameUsingFilter
示例):
angular.module('myApp', [])
.factory('Works', [function(){
var Works = {};
Works.projects = [
{
name: "ProjectOne",
string: "stuff1"
},
{
name : "ProjectTwo",
string : "more stuff",
},
{
name : "ProjectThree",
string : "stuff",
}
];
Works.findByName = function(name) {
var res = '';
Works.projects.forEach(function(work) {
if(work.name === name) {
res = work;
}
});
return res;
};
Works.findByNameUsingFilter = function(name) {
return Works.projects.filter(function(work) {
return work.name === name;
});
};
return Works;
}])
.controller("ProjectController", ['$scope', 'Works', function ($scope, Works) {
$scope.workUsingFindByName = Works.findByName("ProjectOne");
$scope.workUsingFindByNameUsingFilter = Works.findByNameUsingFilter("ProjectThree");
}]);
<script src="//code.angularjs.org/1.6.2/angular.js"></script>
<div ng-app="myApp">
<div ng-controller="ProjectController">
{{workUsingFindByName.string}}
<br/>
{{workUsingFindByNameUsingFilter[0]}}
</div>
</div>
答案 1 :(得分:1)
这些是代码中的错误:
forEach
或map
var Works = {};
Works.projects =[
{
name : "ProjectOne",
string : "stuff"
},
{
name : "ProjectTwo",
string : "more stuff"
},
{
name : "ProjectThree",
string : "stuff"
}
];
Works.findByName = function(name) {
//ES5 Syntax
return Works.projects.filter(function(work) {
if(work.name == name) {
return work;
}
});
//ES6 Syntax
//return Works.projects.filter(work => (work.name == name));
}
console.log(Works.findByName('ProjectThree'))
答案 2 :(得分:0)
检查代码,将Works.findByName更改为无效的函数。
app.factory('Works', function(){
var Works = {}
Works.projects =[
{
name : "ProjectOne",
string : "stuff",
{
name : "ProjectTwo",
string : "more stuff",
},
{
name : "ProjectThree",
string : "stuff",
}
];
var findByName = function(name) {
Works.projects.forEach(function(work) {
if(work.name == name) {
return work;
}
});
}
return {findByName: findByName};
});
app.controller("ProjectController", function ($scope, Works, $routeParams) {
$scope.work = Works.findByName($routeParams.workName);
});