关于javascript:Ng-model不更新控制器值

Ng-model does not update controller value

probably have我愚蠢的问题,但简单的HTML表单和输入和按钮:P></

1
2
3
<input type="text" ng-model="searchText" />
<button ng-click="check()">Check!</button>
{{ searchText }}

然后在模板和控制器控制器是routeprovider called from):P></

1
2
3
$scope.check = function () {
    console.log($scope.searchText);
}

为什么我看到的视图中正确但updated Undefined clicking the button when the控制台?P></

谢谢!P></

更新:似乎我真的solved(之前有问题,为后续工作:with some with)我只改变我searchTextto property name from then to define search.text空对象,控制器和$scope.search = {};茶……我不知道为什么,虽然我的工作;P></


"如果你使用NG的模特,你有一个点在那里。"
一个object.property点使你的模型和你会是好去。

控制器

1
2
3
4
$scope.formData = {};
$scope.check = function () {
  console.log($scope.formData.searchText.$modelValue); //works
}

模板

1
2
<input ng-model="formData.searchText"/>
<button ng-click="check()">Check!</button>

当发生这种情况的范围是在播放的儿童或儿童路线吴样重复序列。孩子的范围创建它自己的价值和一名本土的冲突是在AS画报:

湖本视频剪辑更多:http://如何/手表吗?V=sbwofkrjzve AT&;T = 3m15s


控制器的版本(推荐)。

在这里,模板

1
2
3
    <input type="text" ng-model="$ctrl.searchText" />
    <button ng-click="$ctrl.check()">Check!</button>
    {{ $ctrl.searchText }}

在JS

1
2
3
4
5
6
7
angular.module('example', [])
  .controller('myController', function() {
    var vm = this;
    vm.check = function () {
      console.log(vm.searchText);
    };
  });

例:http:/ / / / / rjawoo codepen.io damax笔

最好的组件将使用1.5或2个角或角上

# # # # # # # #

老单(不推荐)

这是不推荐的,因为一个字符串是一个原始,强烈推荐使用对象而不是

试试这个在你的标记

1
2
3
<input type="text" ng-model="searchText" />
<button ng-click="check(searchText)">Check!</button>
{{ searchText }}

这在你的控制器

1
2
3
$scope.check = function (searchText) {
    console.log(searchText);
}


在Web应用程序开发和掌握p.19 angularjs图书,它是这样写的

Avoid direct bindings to scope's properties. Two-way data binding to
object's properties (exposed on a scope) is a preferred approach. As a
rule of thumb, you should have a dot in an expression provided to the
ng-model directive (for example, ng-model="thing.name").

只是JavaScript对象的范围是,在DOM层次模拟。根据JavaScript的原型继承,范围属性是通过分隔的范围。为了避免这一点,应该使用bind、符号模型。


而不是使用this$scope作品。

1
2
3
4
5
6
function AppCtrl($scope){
  $scope.searchText ="";
  $scope.check = function () {
    console.log("You typed '" + this.searchText +"'"); // used 'this' instead of $scope
  }
}
1
2
3
4
5
6
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js">


 
    <input ng-model="searchText"/>
    <button ng-click="check()">Write console log</button>

编辑:在写作本的答案时,我有更多的情况比这复杂。评论后,我试图复制它明白,为什么它的作品,但没有运气。我认为人(不要真的知道为什么A Child)范围是新生成和this认为指的是范围。但如果$scope是,它实际上是一个父美元的范围,因为范围的JavaScript的词汇特征。

如果有人有这将是伟大的测试问题和美国这样的通知。


我有同样的问题,它需要什么,由于我declaring空白的对象顶部的第一控制器:

1
2
3
$scope.model = {}

<input ng-model="model.firstProperty">

希望这将对你的作品!


我是在同样的问题时,使用一个非平凡的视图(有嵌套作用域)。这是一个已知的发现终于和狡猾的东西,当应用到发展中国家angularjs尽职的原型继承自然的基于Java的脚本。这是通过创建angularjs嵌套范围机制。从价值创造和NG是放置在模型的范围需要的儿童,家长说(也许是注入到一个范围控制器不会看到阴影的价值的价值,所以任何一个想物业名称定义在父范围如果需要使用一个参考点A的原型执行的访问。更多的细节,视频在线检测具体说明这个问题,egghead.io http:/ / /视频/ angularjs的斑点/跟进和评论它。


有一个看这个小提琴http:/ / / / msjql jsfiddle.net ganarajpr

我(我认为)。做什么你做,也和它似乎工作。你能检查什么是不是你在这里?


因为没有人提到这个问题的解决可以通过添加到绑定$parent物业

1
2
    <input type="text" name="login" class="form-control" ng-model="$parent.ssn" ng-pattern="/\d{6,8}-\d{4}|\d{10,12}/" ng-required="true" />
    <button class="button-big" type="submit" ng-click="BankLogin()" ng-disabled="!bankidForm.login.$valid">Logga in</button>

和控制器

1
2
3
4
5
6
7
app.controller("LoginController", ['$scope', function ($scope) {
    $scope.ssn = '';

    $scope.BankLogin = function () {
        console.log($scope.ssn); // works!
    };
}]);


我的问题是我的袜子我的数据和对象(这里的"数据")。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
NgApp.controller('MyController', function($scope) {

   $scope.my_title =""; // This don't work in ng-click function called

   $scope.datas = {
      'my_title' :"",
   };

   $scope.doAction = function() {
         console.log($scope.my_title); // bad value
         console.log($scope.datas.my_title); // Good Value binded by'ng-model'
   }
   

});

它会帮助我跳


我也面临同样的问题…对我有效的解决方法是使用这个关键字……

警报(this.modelname);


我也有同样的问题。正确的方法是将"searchText"设置为对象内的属性。

但如果我想保持原样,一根绳子呢?嗯,我试过这里提到的每一种方法,都没用。但后来我注意到问题只在初始阶段,所以我刚设置了value属性,它就工作了。

1
<input type="text" ng-model="searchText" value={{searchText}} />

这样,该值就被设置为"$scope.searchText"值,并且在输入值更改时会被更新。

我知道这是一个解决办法,但对我来说是有效的。


你可以做的是使在一个ng-keypress回车输入搜索文本和一ng-click的图标:

1
2
3
4
5
6
7
8
9
10
11
12
13
<input type="text" ng-model="searchText" ng-keypress="keyEnter(this,$event)" />
<button ng-click="check(searchText)">Check!</button>

in the controller
$scope.search = function (searchText) {
        console.log(searchText);
    }
    $scope.keyEnter = function (serachText,$event) {
        var keyCode = $event.which || $event.keyCode;
        if (keyCode === 13) {//KeyCode for Enter key
           console.log(searchText);
        }
    }

我只是有这个问题是使用一根_ BODY元素结合到控制器。然后我使用NG视图与角的路由器。问题是,他们总是一个新的角位置范围当它插入到HTML视图元素的NG。作为一个结果,我的"检查"功能是定义在父范围的范围,是吴模型修改的元素。

解决这一问题,只是在使用专用控制器的路径加载的HTML内容。