What's the difference between using function and using inline expression to set scope variable

后端 未结 1 1228
野的像风
野的像风 2021-01-27 17:03

I found some differences between executing function and using expression to set variable, specifically, it seems that ng-if fails to detect the changes made by expr

1条回答
  •  盖世英雄少女心
    2021-01-27 17:55

    It is because ng-if directive creates a child scope. So ng-if="editingProfile" is the editing profile object on the parent which gets inherited to the child scope created by the ng-if. That is what gets displayed @ Editing {{editingProfile.name}}
    . When you do ng-click="editingProfile=false" you are actually updating the child scope's inherited version of editingProfile which does not gets reflected in the one at the parent. But when you do ng-click="backToList()" The function is in the controller and so the $scope.editingProfile refers to the one on the controller (parent) hence that change is reflected and ng-if becomes falsy and it hides the content.

    You could solve this my adding one more level in the scope property hierarchy.

    angular.module("testApp", []).controller("editCtrl",
        function ($scope){
          $scope.model = {};
          $scope.model.editingProfile = null;
          $scope.edit = function() {
              $scope.model.editingProfile = {
                  name: "test"
              };
          }
          $scope.backToList = function() {
              $scope.model.editingProfile = null;
          }
        }    
    )
    

    and

    
    

    Fiddle

    0 讨论(0)
提交回复
热议问题