0

所以我必须范围对象

    $scope.hf_directory = data.features;
    $scope.brylanty = data.features;

实际上它们包含相同的数据,但我想知道手表是如何工作的,所以我可以在我的项目中使用它。

而且我想观看我使用过滤器的 hf_directory:搜索,因此它会在输入字段 ng-model="search" 中键入内容后更新 scope.brylanty

我试图做这样的事情,但没有做任何改变

  $scope.$watch('hf_directory', function (newValue, oldValue, $scope) {
if(newValue) {
  $scope.brylanty = newValue;
}
});

两个范围对象都由 ng-repeat 循环显示,首先我使用过滤器:搜索另一个没有,我知道我可以只使用另一个过滤器:搜索,但我想学习如何使用手表;)

我的对象是 geojson 数据,它们包含相同的值,geojson 如下所示:

  {
"type": "FeatureCollection",
"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } },

"features": [
{ "type": "Feature", "properties": { "name": "SomeName"}, "geometry": { "type":      "Point", "coordinates": [ 11.410585, 11.293361 ] } },
{ "type": "Feature", "properties": { "name": , "SecondName": { "type": "Point",   "coordinates": [ 11.410585, 11.293361 ] } }, .......

]
}

在你的建议之后,我尝试了这个

 $scope.search = {};

 $scope.$watch('search', function (newVal) {

        $scope.brylanty = newVal;

});

和这个

$scope.$watch('search', function (newValue, oldValue, $scope) {
    if (newValue) {
        $scope.brylanty = newValue;
    }
});

但是没有任何好的结果,在这两种情况下,当我开始输入某些东西时,对象 brylanty 正在消失?

4

2 回答 2

0

更新添加演示

根据文档

您可以通过执行以下操作来查看任何变量

$scope.$watch(function(){

    return $scope.hf_directory; // or Directories.hf_directory if Directory is a factory/service 

}, function(newVal, oldVal){
    if(newVal != oldVal){
        $scope.newestValue = newVal;  // Do some cool UI
    }

}, true); // true to check object equality (see below)

对象相等等价于 angular.equal Source

我希望这有帮助。

于 2015-01-06T01:56:01.840 回答
0

如果您想在输入 ng-model="search" 中输入内容时进行更改,那么理想情况下您应该关注搜索变量。它应该是

$scope.$watch('search', function (newValue, oldValue, $scope) {
    if(newValue) {
         $scope.brylanty = newValue;
    }
});

这也可以写成(少 2 行)

$scope.$watch('search', function (newValue, oldValue, $scope) {
     $scope.brylanty = (newValue) ? newValue : $scope.brylanty;
});

或者,您可以在输入字段中使用 ng-change 并拥有

<input ng-model="search" ng-change="brylanty = (search) ? search : brylanty"/>

观看 hf_directory 没有任何效果,因为输入搜索不会影响它。

编辑:如果你真的想看 hf_directory 并且它是一个对象/数组,那么使用

$scope.$watchCollection()

具有相同的论点

于 2015-01-06T01:40:59.313 回答