$ scope和$ watch未更新/工作

时间:2017-04-27 15:17:33

标签: javascript angularjs angularjs-scope

我的ng-model是在$ scope绑定的控制器中未更新的值。我可以保证,我的代码中没有语法错误。只有一个控制器与html绑定。 $ watch仅在加载页面时运行一次。 请注意,我的文件中有220个左右的观察者,而控制器文件非常像1500多行代码。为了交叉检查,我还使用不同的控制器绑定一个div,它按预期工作$ watch和$ scope。

我已经验证我的变量在整个项目中没有重复的名称。我认为角度在每页2000观察者之前没有任何性能问题。但事实并非如此。有人可以对这种奇怪的行为有所了解。任何帮助将不胜感激。

注意:我没有在这里发布代码,因为当我最初开始处理控制器并且在单独的原型上工作正常时,代码运行良好。最近,随着越来越多的代码引入了这种行为。

HTML文件:

<div id="studentSearch" class="form-group__text row studentmargin">
<input id="search" type="text" class="studentSearch" tabindex="2"
       ng-keyup="$event.which === 13 && !disableSearch ? clickSearchButton(): ''"
       placeholder="Search by Name or Email"
       ng-model="searchString">
<label for="search">
    <button type="button" class="link" tabindex="3"
            ng-click="clickSearchButton()" ng-if="!searchResultFlag"
            ng-disabled="disableSearch">
        <span class="icon-search"></span>
    </button>
</label>
<button type="button" class="link" ng-click="clearStudentsSearch()"
        ng-if="searchResultFlag" tabindex="4">
    <span class="icon-close"></span>
</button>

控制器:

angular.module('app.pages.course.details').controller("CourseDetailController", ['$scope', function($scope){

$scope.disableSearch = true;
$scope.$watch('searchString', function(oldValue, newValue){
    if(newValue.length >= 3) {
        $scope.disableSearch = false;
    }
});

$scope.clickSearchButton = function() {   /* Search logic */  } 
$scope.clearStudentsSearch = function() {
     $scope.searchString = ""; 
} }]);

所以逻辑是搜索图标只有在searchString大于或等于3个字母时才会启用。在清除搜索按钮时,它将从UI中清除,如果我们打印范围,则它具有该值,因此在按下按钮时,再次搜索工作。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用模型ng-model =“parent.name”的父级。