ng-change не работает при изменении выбранного значения

Не могли бы вы мне помочь? Я понятия не имею, что это может быть.

Я использую шаблон на своих страницах, и на каждой странице есть ваш файл js с кодом angularJS:

~ / Content / Сценарии / макет / index.js

~ / Content / Scripts / дома / home.js

~ / Content / Scripts / Projetos / projetos.js

Я пытаюсь вызвать функцию при изменении значения раскрывающегося списка, поэтому я использую ng-change в частичном представлении.

Моя страница _Layout:

<html lang="en" class="no-js" ng-app="App">
 ...

<!-- BEGIN CONTENT -->
                <div class="page-content-wrapper">
                    <div class="page-content">
                        @RenderBody()

                        @Scripts.Render("~/bundles/jquery")
                        @RenderSection("scripts", required: false)
                    </div>
                </div>
    <!-- END CONTENT -->

Мой частичный вид загружается, когда событие происходит при появлении в меню

<div ng-cloak ng-controller="ProjetosController" ng-init="init()">
...

<div class="col-md-3">
      <label>Projetos</label>
          <div class="input-icon input-icon-lg">
                <select ng-change="changed()" data-placeholder="selecione..." class="form-control input-lg select2me" ng-model="Projetos"
                       ng-options="proj.Nome for proj in Projetos">
                           <option value=""></option>
                </select>
          </div>

Но ничего не происходит, и любая ошибка произошла, когда я смотрю в инструменты разработчика Chrome.

Мой контроллер C#

public JsonResult LoadProjetos()
        {
            var results = rep.LoadProjetos();//List<Projetos>();

            return Json(new
            {
                projetos = results
            }, JsonRequestBehavior.AllowGet);

        }

Мой контроллер JS

var app = angular.module('App');    
app.controller('ProjetosController', function ($scope, $http) {        
    $scope.init = function () {
        $("#menu").find('li#projetos').addClass("start active");

        $http({
            method: 'GET',
            url: 'Projetos/LoadProjetos'
        }).then(function successCallback(response) {
            var projetos = response.data.projetos;
            $scope.Projetos = projetos;

        }, function errorCallback(response) {
            alert(response);
        });
    }

    $scope.changed = function () {
        alert('text');
    }

});

Есть идеи? Спасибо всем

3 ответа

Решение

После долгого времени я нашел решение. Проблема в том, что моя ng-модель имеет то же имя, что и ng-опция. Я изменил это и работает отлично!

Спасибо всем.

Если вы используете AngularJS версии 1.2.x и новейший Chrome, посмотрите это: https://code.google.com/p/chromium/issues/detail?id=565132

обновлено до 1.4.5 Это должно работать.

Попробуйте эти изменения, чтобы ваш выбор использовал переменную $scope:

<select ng-change="changed()" data-placeholder="selecione..." class="form-control input-lg select2me" ng-model="selectedItem"
   ng-options="proj.Nome for proj in Projetos">
   <option value=""></option>
</select>

$scope.changed = function () {
     alert($scope.selectedItem);
 }

http://plnkr.co/edit/uUf9ehxQpBSzVgQasTtN?p=info

Другие вопросы по тегам