当前位置: 代码迷 >> JavaScript >> $ scope.apply在Angular中不起作用
  详细解决方案

$ scope.apply在Angular中不起作用

热度:122   发布时间:2023-06-12 13:45:20.0

我试图学习Angular。 这是我想做的事情:

我正在构建一个向我展示城市的应用程序。 当我单击一个城市时,我想查看所有我喜欢的城市的列表。

可以通过ng-click使用“显示列表”按钮,但是需要按下该按钮。

这是我的自动完成方法:

我希望DOM列表在更改列表时自动更新。

$scope.$watch('updatedList', function() {

        // CHECK IF WORKS
        console.log($scope.updatedList);

        // APPLY TO DOM
        $timeout(function(){

            $scope.$apply(function () {
                $scope.watchList = $scope.updatedList;
            });

        }, 1000)
    });

控制台未显示任何错误,并给出了正确的值:

对象{city.3:“ Herat”,city.7:“ Haag”,city.10:“ Tilburg” ...}

在我的div中是以下内容:

<ul>
                <li ng-repeat="y in updatedList">{{ y }}</li>
            </ul>
            <ul>
                <li ng-repeat="a in watchList">{{ a }}</li>
            </ul>

首先是NG-Click-Version(可在点击时使用),其次是$ scope。$ watch

很抱歉有很多问题,但是我真的在Angular-Docs上挣扎。

编辑:

将城市添加到列表的功能:

$scope.addToList = function(name,id) {

        var cityToAdd = name;
        var cityToAddID = id;

        // ADD A CITY TO THE COOKIE -> WORKS
        $cookies.put('city.' + cityToAddID, cityToAdd);
        $scope.newList = $cookies.getAll();
        $scope.addToListMessage = cityToAdd + " wurde hinzugefügt";

        // Show short INFONOTICE
        window.setTimeout(function() {
            $scope.$apply(function() {
                $scope.addToListMessage = "";

            });
        }, 1000);
            // Update the List
            $scope.updateList();

    };

第二个功能->从Cookies中获取值并将其放入数组中:

$scope.updateList = function() {

        var allCitys = $cookies.getAll();


        // PUT ALL INTO AN ARRAY -> WORKS
        var favouritesFromCookie = [];
        $.each(allCitys, function(index, value) {

            if (index.indexOf('city.') == 0) { favouritesFromCookie.push(value) }
        });

        // PUT THE ARRAY OF CITYS INTO A SCOPE_VARIABLE

            $scope.updatedList = favouritesFromCookie;



    };

您的$ scope.updatedList必须是要在ng-repeat中使用的数组。

您不应该直接在表达式中编写列表。 尝试这个

<ul>
    <li ng-repeat="y in watchList">{{ y.city }}</li>
    <li ng-repeat="y in watchList">{{ y.yourListItem}}</li>
</ul>
  相关解决方案