2014-01-10 32 views
1

您有一個控制器,一個暴露在其範圍內的模型,用戶可以在模板中操作,控制器中的一個函數,該模型將作用於模板中的點擊處理程序將調用的模型。當你爲什麼寧願之一:

  • 調用與模型參數通過模板
  • 函數調用與模型的功能範圍

Working fiddle.

關閉了

編輯:John Lindquist在this video,他主張使用第一種形式,聲稱它使測試更容易。我可以同意這一點,因爲如果傳遞一個參數,對控制器方法的測試可以更易讀。

模板:

<div ng-app="myApp"> 
    <div class="container demo-container" ng-controller="MyCtrl"> 

     <label for="model_input"> 
      Model: 
      <input type="text" class="form-control" ng-model="model" name="model_input"/> 
     </label> 

     <p> 
      Invoke function with <strong>'{{model}}'</strong> explicitly through template 
     </p> 
     <button class="btn btn-primary" ng-click="fn_through_tpl(model)"> 
      Click 
     </button> 

     <p> 
      Invoke function with <strong>'{{model}}'</strong> implicitly through controller 
     </p> 
     <button class="btn btn-primary" ng-click="fn_through_ctrl()"> 
      Click 
     </button> 

    </div> 
</div> 

控制器:

angular.module('myApp', []) 

.controller('MyCtrl', function ($scope) { 
    $scope.model = "my model"; 

    $scope.fn_through_tpl = function (model) { 
     alert(model + " through template!"); 
    } 

    $scope.fn_through_ctrl = function() { 
     alert($scope.model + " through $scope!"); 
    } 
}); 

回答

2

在你的榜樣,我建議後者 - 你通過控制器調用什麼功能。使用雙向數據綁定時,不需要將模型返回,因爲它已經被更新。這對讀者來說是多餘的和混亂的。相反,在控制器上調用行爲模型上的行爲。

我認爲當模型是或包含一個數組,並且您想暴露對數組元素起作用的控制器動作時,前一個模式是合適的。例如:

<div ng-repeat="comment in post.comments"> 
    {{ comment.message }} 
    <button ng-click="deleteComment(comment)">Delete comment</button> 
</div> 
+0

這是第一種形式合適的一個很好的例子。 – yangmillstheory

相關問題