【问题标题】:AngularJS broadcastingAngularJS 广播
【发布时间】:2015-06-28 17:40:00
【问题描述】:

具有需要向子控制器广播的刷新功能。我在父控制器中做了这样的事情:

      // Refresh/Cancel
  $scope.OnGridBODRefresh() = {
        function () {
         $scope.$broadcast('refresh',$scope.dtBODStartValue,$scope.dtBODStopValue);                                  
        }          
        } 

在子控制器中:

      // Refresh/Cancel
  $scope.OnGridBODRefresh = function () {        
    // Filter setzen
    kendoHelper.SetDataSourceFilters($scope.gridBODProductionRequests.dataSource, "BODTime", "gte", $scope.dtBODStartValue);    // gte Kendo Operator
    kendoHelper.SetDataSourceFilters($scope.gridBODProductionRequests.dataSource, "BODTime", "lte", $scope.dtBODStopValue);       // lte Kendo Operator
  }

  $scope.dtChildStopValue = new Date();
  $scope.dtChildStartValue = new Date($scope.dtChildStopValue - 7 * TIMEINTERVAL_PER_DAY_MS);

      $scope.$on('refresh', function (event, dtBODStartValue, dtBODStopValue) {
           $scope.dtChildStartValue = dtBODStartValue;
           $scope.dtChildStopValue = dtBODStopValue;
         }
         )         

它应该在“取消”按钮上激活。我有一个错误:控制台中的“$scope.OnGridBODRefresh 不是函数”。有人知道吗?谢谢

这是我的控制器和视图之间的链接:

<table border="0" class="navigationBar">
                <tr>
                    <td class="navigationBar-left">
                        ({{refreshcount}})
                        <kendo-button class="k-primary button button-save" ng-click="OnGridBODSave()">Save</kendo-button>
                        <kendo-button class="k-primary button button-cancel" ng-click="OnGridBODRefresh()">Cancel</kendo-button>
                    </td>
                    <td class="navigationBar-right">
                        @PLanguageTexts.TXT_AUTO_REFRESH:  <input type="checkbox" name="checkBoxAutomaticRefresh" ng-model="checkBoxAutomaticRefreshValue" ng-true-value="1" ng-false-value="0" ng-change="OnCheckBoxAutomaticRefreshChange(e)">
                        | 
                        @PLanguageTexts.TXT_BOD_TIME
                      <input kendo-date-time-picker="dateTimePickerBODStart" k-ng-model="dtBODStartValue" k-options="dateTimePickerBODStart"/>
                      <input kendo-date-time-picker="dateTimePickerBODStop" k-ng-model="dtBODStopValue" k-options="dateTimePickerBODStop"/>
                    </td>
                </tr>
            </table> 



 <div ng-controller="BODProductionRequestsCtrl">  
                                   <div kendo-grid="gridBODProductionRequests" k-options="gridBODProductionRequests(dataItem)">
                                          <div k-detail-template>
                                            <kendo-tabstrip>
                                              <ul>
                                                  <li class="k-state-active">@PLanguageTexts.TXT_COMMENT</li>
                                              </ul>
                                              <div>
                                                <textarea id="BODProductionRequestsComment" class="textarea-gridComment" ng-model="dataItem.Comment" ng-change="OnCommentChange(dataItem, gridBODProductionRequests)"></textarea>
                                              </div>
                                            </kendo-tabstrip>
                                          </div>
                                    </div>
                                    {{dtChildStartValue}}
                              </div>  

【问题讨论】:

  • 取消按钮在哪里?
  • 我不确定 Kendo 是如何工作的,但如果它操纵 DOM,可能与 Angular 的工作方式不兼容
  • 我看不到你的 ng-controller 了^^
  • 现在是 ng-controller
  • 我已经更新了答案

标签: javascript angularjs javascript-events angular-broadcast


【解决方案1】:
  // Refresh/Cancel
$scope.OnGridBODRefresh = function () {
        $scope.$broadcast('refresh',$scope.dtBODStartValue,$scope.dtBODStopValue);                                  
    }  

我不明白你为什么将你的函数包装到一个对象中。如果您删除函数周围的括号,它会像魅力一样工作。

另一个问题是您的 ng-click 不在链接到控制器的 div 内。试着那样做。如果它不起作用,可能还有剑道问题,我无法提供帮助。

 <div ng-controller="BODProductionRequestsCtrl">  
    <table border="0" class="navigationBar">
            <tr>
                <td class="navigationBar-left">
                    ({{refreshcount}})
                    <kendo-button class="k-primary button button-save" ng-click="OnGridBODSave()">Save</kendo-button>
                    <kendo-button class="k-primary button button-cancel" ng-click="OnGridBODRefresh()">Cancel</kendo-button>
                </td>
                <td class="navigationBar-right">
                    @PLanguageTexts.TXT_AUTO_REFRESH:  <input type="checkbox" name="checkBoxAutomaticRefresh" ng-model="checkBoxAutomaticRefreshValue" ng-true-value="1" ng-false-value="0" ng-change="OnCheckBoxAutomaticRefreshChange(e)">
                    | 
                    @PLanguageTexts.TXT_BOD_TIME
                  <input kendo-date-time-picker="dateTimePickerBODStart" k-ng-model="dtBODStartValue" k-options="dateTimePickerBODStart"/>
                  <input kendo-date-time-picker="dateTimePickerBODStop" k-ng-model="dtBODStopValue" k-options="dateTimePickerBODStop"/>
                </td>
            </tr>
        </table> 



                               <div kendo-grid="gridBODProductionRequests" k-options="gridBODProductionRequests(dataItem)">
                                      <div k-detail-template>
                                        <kendo-tabstrip>
                                          <ul>
                                              <li class="k-state-active">@PLanguageTexts.TXT_COMMENT</li>
                                          </ul>
                                          <div>
                                            <textarea id="BODProductionRequestsComment" class="textarea-gridComment" ng-model="dataItem.Comment" ng-change="OnCommentChange(dataItem, gridBODProductionRequests)"></textarea>
                                          </div>
                                        </kendo-tabstrip>
                                      </div>
                                </div>
                                {{dtChildStartValue}}
                          </div>  

【讨论】:

  • 您确定您的浏览器缓存已被清除吗? dtChildStartValue 是否可以从您的视图中访问?
  • 你能更新你的问题,在你的控制器和你的视图之间添加链接吗?
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 2015-07-09
  • 2017-09-05
  • 2012-09-11
  • 1970-01-01
  • 2023-03-15
  • 2017-10-01
  • 1970-01-01
相关资源
最近更新 更多