使用ng-click从控制器调用函数到我的视图

时间:2016-05-25 18:42:43

标签: javascript angularjs

我有两个按钮。

 <div class="btn-group" ng-init="showData = 1">
     <button ng-model="showData" type="button" ng-class='{"btn btn-primary": showData == 1, "btn btn-white": showData != 1}' ng-click="showData = 1">Headline</button>
     <button ng-click="eventDescription()" ng-model="showData" type="button" ng-class='{"btn btn-primary":showData == 2, "btn btn-white": showData != 2}'  ng-click="showData = 2">Summary</button>
 </div>

在我的控制器中,我有一个调用WS的函数,在控制台中我打印一条消息,以确保它正常工作,我能够看到它,              我的功能是这样的:

$scope.eventDescription = function () {

   some code goes here

    console.log("Service OK")

}

功能代码无关紧要,所以我没有把代码放在

问题是,当我点击按钮切换到该视图时没有任何反应,我无法切换到该视图,所以如果我使用ng-click,我不会得到错误。

也许我错过了一些东西,但我是个新角色。

我认为这是相关的,取决于按钮选择我调用不同的指令(我在它们上呈现一些HTML),如下所示:

  <head-line-view ng-show="showData == 1"></head-line-view>
  <summary-view ng-show="showData == 2"></summary-view>

3 个答案:

答案 0 :(得分:1)

按钮标记中有2 ng-click属性,请尝试此

 <button ng-click="eventDescription();showData = 2" ng-model="showData" type="button" ng-class='{"btn btn-primary":showData == 2, "btn btn-white": showData != 2}'>Summary</button> 

答案 1 :(得分:1)

点击两个按钮,必须调用函数eventDescription。

在原始代码中......   第一个按钮只是更改$ scope.showData的值。   第二个按钮有两次ng-click,一旦做了'eventDescription&#39;而不是&#39; eventDescription()&#39;,另一个是更改$ scope.showData的值。

如果在按钮上单击,您希望更改$ scope.showData的值并调用函数$ scope.eventDescription,您应该在函数中更改它...但是,您可以在ng上执行此操作 - 同样点击

ng-click="showData = 1 && eventDescription()"

我更喜欢在函数中执行它,因为它会占用html中较少的空间。

<div class="btn-group">
 <button ng-click="eventDescription(1)">Headline</button>
 <button ng-click="eventDescription(2)" >Summary</button>
</div>

$scope.eventDescription = function (viewNumber) {
    $scope.showData = viewNumber;
    console.log("Button Clicked");
}

答案 2 :(得分:0)

您可以遵循以下几点:

  
      
  1. 您应该将 app.service('mapService', (function($http,$q) { //Coordinates var fmCoordinates = {}; //Function to Request markets var requestMarkets = function(lat,lng){ var defer = $q.defer(); var dataFromHttp = {}; var options = { type: "GET", contentType: "application/json; charset=utf-8", url: "http://someurl?lat=" + lat + "&lng=" + lng }; $http(options).then(function(result) { dataFromHttp = result.data; defer.resolve(dataFromHttp); }, function(error){ defer.reject(error); }); return defer.promise; }; L.Control.Search = L.Control.extend({ _getLocation: function(key) { //extract latlng from _recordsCache var latLong = this._recordsCache[key]; console.log("This is latlong:\n"+Object.keys(latLong)); fmCoordinates.lat = latLong.lat; fmCoordinates.lng = latLong.lng; console.log(fmCoordinates.lat,fmCoordinates.lng || "Nothing yet!"); var promise = requestMarkets(fmCoordinates.lat,fmCoordinates.lng); promise.then(function(greeting) { for(var property in greeting.results) { console.log(property + "=" + greeting.results[property]); }; console.log('Success: ' + greeting.results); }, function(reason) { console.log('Failed: ' + reason); }); if( this._recordsCache.hasOwnProperty(key) ) return latLong;//then after use .loc attribute else return false; }, L.Map.addInitHook(function () { if (this.options.searchControl) { this.searchControl = L.control.search(this.options.searchControl); this.addControl(this.searchControl); } }); L.control.search = function (options) { return new L.Control.Search(options); }; })); 用于不在其他标记中的输入字段,因此不应在按钮标记
  2. 中使用   
  3. 最好在控制器ng-model
  4. 中初始化   
  5. $scope.showData = 1;类很常见,因此请在btn中使用,不需要条件
  6.   

所以你可以尝试:

<强> HTML:

class="btn"

<强>控制器:

<div class="btn-group">
     <button type="button" class="btn" ng-class="showData===1? 'btn-primary' : 'btn-white' " ng-click="showData = 1">Headline</button>
     <button type="button" class="btn" ng-class="showData===2? 'btn-primary' : 'btn-white' " ng-click="eventDescription()" >Summary</button>
 </div>