如何让AngularJS将我的模型属性设置为null而不是<select>中的undefined

时间:2017-04-24 17:10:43

标签: javascript angularjs

所以,我的网站上有几个元素,其中的选项绑定到具有整数ID的复杂对象。下拉列表的值绑定到对象的ID,如下所示: &lt; select id =&#34; selThings&#34;命名=&#34; selThings&#34;类=&#34;形状控制&#34;  NG-变化=&#34; onOptionChange(&#39; thing.id&#39;)&#34; NG-模型=&#34; data.thing.id&#34;转换到数字&GT;     &lt; option value = {{null}}&gt;         选择一件事......     &LT; /选项&GT;     &lt; option ng-repeat =&#34; data.things&#34;值=&#34; {{thing.id}}&#34;&GT;         {{thing.displayName}}     &LT; /选项&GT; &LT; /选择&GT; 我的convert-to-number指令如下所示: app.directive(&#39; convertToNumber&#39;,function(){     返回{         要求:&#39; ngModel&#39;,         link:function(scope,element,attrs,ngModel){             ngModel。$ parsers.push(function(val){                 return val!== undefined&amp;&amp; val!== null&amp;&amp; val!==&#39;&#39; ? parseInt(val,10):null;             });             ngModel。$ formatters.push(function(val){                 return val!== undefined&amp;&amp; val!== null? &#39;&#39; + val:null;             });         }     }; }); 只要选择了非null选项,这就可以正常工作。模型值正确设置为整数而不是字符串值(即5而不是&#34; 5&#34;);问题是当选择null选项时。 convertToNumber指令正确地从返回值返回null值!== undefined&amp;&amp; val!== null? &#39;&#39; + val:null;。但是,如果我在控制器上为thing.id设置$ watch,当它命中时,thing.id的新值是未定义的。 我尝试过使用ng-option代替&lt; option ng-repeat ...&gt;但没有运气。作为一种解决方法,我使用ng-change =&#34; onOptionChange(&#39; thing.id&#39;)&#34;解析该属性,如果未定义,则将其更改为null。我的老板和我同意这是处理这种情况的一种混乱的丑陋方式,所以我需要找到一种更好的方法来将model属性设置为null。

1 个答案:

答案 0 :(得分:0)

You can define empty Object with empty values for all properties which is in object