0

使用angular指令,我在我的angularjs項目中創建了一個自定義timepicker。不幸的是,在使用模式時,時間選擇器無法正常工作,請參閱:http://plnkr.co/edit/QvBHJyoA4O32y9cnsNzEAngularjs:Modal中的JQuery UI指令導致麻煩

第一次打開模式時,一切正常。但關閉它時(通過點擊某處模式外),並再次打開它,我看到這個錯誤控制檯:

TypeError: Cannot read property 'timeFormat' of undefined 
    at methods.setTime (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/jquery.timepicker.js:222:81) 
    at $.fn.timepicker (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/jquery.timepicker.js:821:48) 
    at ngModel.$render (http://run.plnkr.co/o2Sj3E7DaqcyasgA/app.js:26:23) 
    at Object.<anonymous> (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/angular.min.js:140:131) 
    at Object.e.$digest (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/angular.min.js:86:286) 
    at Object.e.$apply (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/angular.min.js:88:506) 
    at HTMLButtonElement.<anonymous> (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/angular.min.js:144:122) 
    at HTMLButtonElement.x.event.dispatch (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/jquery.min.js:5:9843) 
    at HTMLButtonElement.y.handle (https://dl.dropboxusercontent.com/u/1004639/stackoverflow/jquery.min.js:5:6626) 

當關閉並重​​新打開模式,我在控制檯中看到錯誤消息的兩倍。

我認爲問題與渲​​染回調有關(ngModel。$ render = ...)。似乎角嘗試渲染不再存在的東西。但我無法修復它。特別是因爲指令不知道它是否處於模態。因此,緩存模式關閉事件是沒有意義的。

回答

0

我找到了解決方案。指令元素有一個$ destroy事件。當這個事件被調用時,$渲染功能,可以用空的功能所覆蓋:

element.bind("$destroy", function() { 
    if (ngModel) { 
     ngModel.$render = function() {}; 
    } 
}); 

隨着剪斷這個額外的代碼,我的例子就像一個魅力。