簡體   English   中英

數據更改時的angularjs和ng-init范圍

[英]angularjs and ng-init scope when data changes

因此,我有一個日歷應用程序,現在用戶可以在其中選擇開始/結束日期,然后單擊“更新日歷”。 這將填充一個日歷。 但是,我在合並范圍內添加新元素時遇到了麻煩。 例如,我不是一遍又一遍地連續使用相同的函數從開始日期,星期幾,星期幾等來計算某個單元格的“單元格日期”,而是希望將單元格日期一次存儲到其范圍內並讓其他人使用。 盡管進行了很多嘗試,我還是無法以某種方式執行此操作。 在下面的JSFiddle中,您會注意到每個日歷單元格的右上角顯示每月的某天。 但是,如果您更改日期(例如前一個月),則該月的日期會更新,但是我在單元格中顯示的“單元格日期”不會更新!

例如,以“ 2014年7月5日星期六”為例。 更新日期以6/1開始,最右邊的單元格仍然是“ Sat Jul 05 2014”,即使它的月份是6月7日! 相關代碼在“ calcell”指令和“ events”指令中。 在calcell中,我將單元格設置為ng-init ='celld = cellDate(num,start_dt,$ index)'。 然后在事件中,我只是使用{{celld}}進行顯示。 我可以通過在事件中使用cellDate(num,start_dt,$ index)來使其工作,但我真的不想在各處使用同一函數一百萬次。 有沒有一種方法可以將單元格日期存儲在單元格對象中,並僅在子級作用域中使用它,並在數據更改時更新它? 最終,我將把單元格日期傳遞給函數以獲取該日期的事件數據,然后事件將在其上進行迭代以顯示事件數據。

小提琴鏈接

app.directive("events", function($compile, DateService) {
        return {
            restrict: "A",
            replace: true,
            scope: true,
            template: 
                    "<div>{{celld}}</div>",
            link: function(scope, element, attrs) {
                scope.DateService = DateService;
            }
        }
    });

    //calendar cell 
    app.directive("calcell", function($compile, DateService) {
        return {
            restrict: "A", 
            replace: true, 
            scope: true,
            template: 
                "<td ng-init='celld=cellDate(num, start_dt, $index)' id='{{\"td\" + DateService.getDateInt(cellDate(num, start_dt, $index))}}' \
                        realclass='{{getScopeClass(cellDate(num, start_dt, $index))}}'>\
                    <div>\
                        <a class='CellDay'>{{DateService.getMonthDay(cellDate(num, start_dt, $index))}}</a>\
                    </div>\
                    <br/>\
                    <br/>\
                    <br/>\
                    <br/>\
                    <div events></div>\
                    </div>\
                </td>",
            link: function(scope, element, attrs) {                 
                scope.DateService = DateService;
            }
        }
    }); 

謝謝!

我可以通過將單元格放在事件標簽上來使其工作。 不確定是否有幫助。

<div events ng-attr-celld='{{cellDate(num, start_dt, $index)}}'></div>

無需替換它,並且attr是作用域值。

//replace: true,
...
scope: {celld:'@'}

小提琴

如果您還沒有看到- 角度ui日歷 -可能會節省您一些時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM