使用自定义指令选择AngularJS ng-change

时间:2015-08-05 12:38:58

标签: javascript angularjs javascript-events angularjs-directive angularjs-scope

在我的应用程序中,我有一个带有select标签的自定义指令。

<div class="row pv10" ng-if="item.visible">
  <div class="col-xs-4 text-danger"><span ng-if="item.label_visible"> {{item.label}}</span></div>
     <div class="col-xs-8">
        <div class="row">
          <div class="col-xs-1">
            <select ng-options="oneItem for oneItem in item.options" ng-model="selectedItem" ng-change="changeEvent()">
                {{selectedItem | json}}
            </select>
          </div>
      </div>
   </div>
</div>

我想对每个变更事件执行操作。我试着使用ng-change,顺便说一句。使用radioBtn / checkBox工作得很好。我在这里尝试了两种方法。

首先,我尝试将“changeEvent”函数传递给指令的隔离范围。

<custom-select item='item' change-event="change()" ng-if="item.component == 'select'" />

changeEvent()函数存在于当前控制器中(附加到持有自定义选择的视图)

scope: {
        item: "=",
        changeEvent: "&"
    }

可悲的是,表达不会对变化进行评估。 其次,我试图将函数直接附加到指令

link: function ($scope, elems, attrs) {
        $scope.changeEvent = function () {
            alert("Change Event!");
        }
    }

但它也没有用。

我在某处读到,即使在自定义指令中使用的ng-change也在控制器范围内运行,而不是隔离的指令范围。但是我不太确定。 我非常感谢你的帮助。 谢谢!

EDIT!

这是我使用的指令的JSFiddle。如果我应该提供更多细节,请告诉我,这是我第一次使用jsfiddle。

这是调用指令的方式:

<div class="row" ng-repeat="item in jsonData">
  <div class="col-xs-12">   
    <cbp-select item='item' change="change()" ng-if="item.component == 'select'" />
  </div>
</div>

https://jsfiddle.net/60nsfg0L/

EDIT2

当我将我的解决方案上传到我们的本地服务器时,它开始正常工作。(是的,我清理了浏览器的现金,我的本地人也用wamp / iss缓存)。 但现在我有一个不同的问题。 我有一个由不同指令构建的表单(如上面的那个),都有ng-click / change / blur。在我改变“select”指令中的一个选项之前,一切似乎都能正常工作。选择其中一个值后,触发ng-change表达式(因为它不仅仅是一个简单的警报),从那一刻开始,我无法专注于任何其他元素。奇怪的是,如果我导致ng-change触发任何其他元素,无论是radiobtn还是checkbox,都不会发生此问题

0 个答案:

没有答案