【问题标题】:Iterating with filter in Angular factory itself在 Angular 工厂本身中使用过滤器进行迭代
【发布时间】:2015-04-10 06:33:12
【问题描述】:

我的问题是我使用带有 2 个控制器的工厂,第一个返回给我一个完整的数组,第二个想要返回一个项目,这是基于过滤表达式的。我从 url 中获取最后两个参数,遍历数组并检查哪个数组项具有特定属性的值,然后只返回该元素及其所有属性和值。到目前为止没有问题,但是如果我想在工厂内部声明数组本身的返回树中过滤,如何在 Angular 中做到这一点? 如需帮助,我附上 jsfiddle 链接,您可以在 html 部分找到一些解释: https://jsfiddle.net/65224mk6/

如果你不想查看链接,这里是我的工厂和控制器。

portApp.factory("workFactory", function() {
    var selected = [];
    var works = [
    {
        Title: "Sprite",
        subTitle: "",
        Link: "sprite",
        Thumbnail: "img/portfolio02.png",
        Image: "img/ismont.png"
    },
    {
        Title: "Pepsi",
        subTitle: "Kristályvíz",
        Link: "pepsi",
        Thumbnail: "img/portfolio03.png",
        Image: "img/sanofimont.png"
    }
    ];
    return {
        list: function() {
            return works;
        },
        selected: function() {
            return works[0]; // probably selected[]
        }
    };
});

portApp.controller("listController", ["$scope", "workFactory", 
    function($scope, workFactory) {
        $scope.allWorks = workFactory.list();
    }
]);

portApp.controller("itemController", ["$scope", "workFactory", "$stateParams",
    function($scope, workFactory, $stateParams) {
        var detPath = $stateParams.itemLink;
        //$scope.selectedWork = workFactory.selected(detPath);
    }
]);

【问题讨论】:

    标签: javascript arrays angularjs


    【解决方案1】:

    选择的应该是一个有参数的函数:

     return {
       list: function() {
         return works;
       },
       selected: function(detPath) {
         //Filter based on the detPath
         selected = works.filter(function(work) {
           return work.Link == detPath;
         });
         return selected;
       }
     };
    

    然后你可以在控制器中调用它:

     portApp.controller("itemController", ["$scope", "workFactory", "$stateParams",
       function($scope, workFactory, $stateParams) {
         var detPath = $stateParams.itemLink;
         $scope.selectedWork = workFactory.selected(detPath);
       }
     ]);
    

    【讨论】:

    • 哦,谢谢你,真的帮了我很多:) 只是一个问题.. 在我返回 $scope.selectedWork.. 在我的视图中如何访问它? {{ selectedWork.Title }} 应该足够了吗?只是因为它现在没有给我任何东西。
    • selectedWork 现在是一个数组。如果您只想要一个对象,请在控制器中获取数组的第一个对象: $scope.selectedWork = workFactory.selected(detPath)[0];
    • 与此同时,我设法弄明白了:) 并用 $scope.$watch('$viewContentLoaded', function(){ ... 检查了内容,它取回了我的数据想看看 :) 不幸的是,在我看来,什么都没有呈现:s 这是视图:

      {{ selectedWork.Title }}

      {{ selectedWork.subTitle }}

      也许打错了什么?
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-18
    • 2022-07-06
    • 1970-01-01
    相关资源
    最近更新 更多