javascript - watch() 函数在 json 调用上无法正常工作 angular.js

标签 javascript json angularjs

我想在 $http.selectedSong (模型值)更改时执行一个方法,但我似乎无法让它工作,有什么想法吗? :

app.controller('songController', ['$http', function($http) {

    $songs = this;
    $songs.tracks = [];

    $http({
            url: "http://api.q-music.be/1.2/tracks/plays?limit=20",
            dataType: "jsonp",
            jsonp: "callback"
        })
        .success(function(lastSongsList) {

            $http.$watch('selectedSong', function (newVal, oldVal) {
                 if (newVal !== oldVal) {
                    alert('hej');
                 }
            });
        });

}]);

我的目标是处理从这个 html 代码中获得的数据:

<select ng-model="selectedSong"  ng-init="selectedSong === songs.tracks[0].title" ng-options="song as song.title for song in songs.tracks"></select>

我想看看我在“选择”中选择的值何时发生变化,以便我可以使用该值来执行方法等...

最佳答案

$watch$scope 独有的构造。服务。

我假设您正在使用 controller as 语法,在这种情况下,您不会在 Controller 中直接使用 $scope 。但是,您可以设置 ng-change每当绑定(bind)模型更改时执行任意代码的指令。

<select ng-model="ctrl.selectedSong" ng-change="ctrl.doStuff()">

这最终是比使用 $watch 更干净的选择

这是基于上面示例的工作片段

(function() {
  'use strict';

  function InputController() {
    var vm = this;
    vm.songs = ['Uptown Funk!', 'Thinking Out Loud','Take Me To Church','Blank Space'];
    vm.selectedSong = vm.songs[0];

    vm.onSongChange = function() {
      alert(vm.selectedSong);
    };
  }

  angular.module('inputs', [])
    .controller('InputCtrl', InputController);

}());
<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.12/angular.min.js"></script>
<div class="container" ng-app="inputs" ng-controller="InputCtrl as ctrl">
  <div class="row">
    <div class="col-xs-6">
      <h3>Primary</h3>
      <select class="form-control" ng-model="ctrl.selectedSong" ng-options="song for song in ctrl.songs" ng-change="ctrl.onSongChange()"></select>
    </div>
  </div>
</div>

关于javascript - watch() 函数在 json 调用上无法正常工作 angular.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28345214/

相关文章:

javascript - 使用 HTML5 文档类型时容器中的额外顶部填充

javascript - 如何使用javascript将对象数组的重复元素合并为一个

python - 如何将 json 转换为 Python 列表?

javascript - 为什么 JSON.parse() 不解析 JSON 对象的内部数组?

angularjs - 错误 11 秒后等待 Protractor 与页面同步超时

javascript - 设置动画延迟值

javascript - 只有语义 UI 下拉图标?

java - 如何在我的 JSF Web 应用程序中拥有 AJAX 功能?

javascript - 结合 AngularJS、RequireJS 和 asp.NET 时出错

javascript - 使用 javascript 的条件必填字段 - SuiteCRM 7.3.1