Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript $watch变量以进行更改angularjs_Javascript_Angularjs - Fatal编程技术网

Javascript $watch变量以进行更改angularjs

Javascript $watch变量以进行更改angularjs,javascript,angularjs,Javascript,Angularjs,我不熟悉复杂的角度指令。我在根范围中有一个名为$root.page的变量。我设置了一块手表,如下所示: $scope.$watch( "$root.page", function handleChange( newValue, oldValue ) { //show the select page only on page change console.log(oldValue, newValue); if (!oldValue || oldValue !==

我不熟悉复杂的角度指令。我在根范围中有一个名为
$root.page
的变量。我设置了一块手表,如下所示:

$scope.$watch(
  "$root.page",
  function handleChange( newValue, oldValue ) {
    //show the select page only on page change

    console.log(oldValue, newValue);

    if (!oldValue || oldValue !== newValue) {
      $scope.showSelectOnly = true;
    }
  }
);

我的代码当前的结构方式,
$scope.showSelectOnly
始终为真。我只希望
$scope.showSelectOnly
$root.page
发生更改时为true,在所有其他情况下(即
$root.page
变量未发生更改时)为false

我想你不需要手表来装这个箱子。您可能希望研究使用角度值。您可以在整个角度模块应用程序中访问角度值。这样,您只需在页面更改时更新showSelectOnly即可

angular.module('myApp', [])
  .value('page', true)
  .value('showSelectOnly', true);
然后,您可以将页面插入模块中的任何控制器,并根据需要更新这两个值

angular.module('myApp')
  .controller('myCtrl', function (page, showSelectOnly) {
      if (!page) {
         showSelectOnly = true;
      }
  });

以下是您需要的代码:

HTML:


添加else语句并将false值赋给$scope.showSelectOnly怎么样?我在2分钟前就尝试过了,效果不错。我没有意识到,
$watch
就是这样工作的,你也可以检查“无变化”。我想这就是$watch over ng change的情况吗?我很快就跟他谈过了-这不起作用,我明白逻辑,但我不明白用例。你想从用户体验中获得什么?也许有更好的办法。我想我刚才回答了,对不起。共有三列。在第一部分中,有两个部分对工作项的案例进行分组。当您单击其中一个时,将在第二列中分别显示每个案例的项目列表。在第三列中,我希望显示一个带有“selectanitem”的div。无论何时单击第一列中的任何位置,我都希望“选择项目”显示在第三列中。否则,就不需要那个div了。我最终用$rootScope解决了这个问题,所以我仍然在寻找好的答案。我认为这个值应该是一个带有键“page”和“showSelectOnly”的散列否则,他们将不得不通过一个相当间接的过程来更改存储在值中的构造。您的演示复制了我的问题:)我单击了一次按钮,它永远保持为true,没有更改时它不会返回为false第一个状态为false,然后单击按钮状态为change,并将其设置为true。如果再次单击完成,是否希望它更改为false?是的,正如我在问题中提到的,我希望它在所有其他情况下都为false(即,$root.page变量没有更改)。
<div ng-app="app" ng-controller='myCtrl as vm'>

  <button ng-click="$root.page = 1">Change root Page</button>
  <label>
     showSelectOnly: {{showSelectOnly}}
  </label>

</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.8/angular.js"></script>
angular.module('app', [])
 .controller('myCtrl', function($scope) {
  var vm = this;
  $scope.showSelectOnly = false;

  $scope.$watch(
    "$root.page",
    function handleChange(newValue, oldValue) {
      if (newValue !== oldValue) {
        $scope.showSelectOnly = true;
      }
    }
  );
})