2014-06-10 54 views
-2

好吧,我知道這不是一個好的做法,把一個監視器內的控制器,但在這種情況下,我怎麼能避免使用監視器?如何避免在我的控制器中使用觀察者?

ps:$ rootcope它不是一個選項好嗎?

這裏是代碼:

plunker

編輯 - 在這裏我做了什麼: plunker

這裏是js代碼:

var app = angular.module('plunker', []); 

app.controller('MainCtrl', function($scope, mainService) { 
    var flag = false; 
    $scope.btn = function() { 
    flag = !flag; 
    mainService.setData(flag); 
    } 
}); 

app.controller('DemoOneCtrl', function($scope, mainService) { 
    $scope.name   = 'World'; 
    $scope.mainService = mainService; 
    $scope.show   = false; 

    $scope.$watch('mainService.getData()', function (data) { 
     $scope.show = data; 
    }); 
}); 

app.service('mainService', function() { 
    var data = false; 
    this.setData = function (str) { 
    data = str; 
    }; 

    this.getData = function() { 
    return data; 
    }; 
}); 

和HTML:

<div ng-controller="MainCtrl"> 
    <button ng-click="btn()">GO!</button> 
</div> 
<div ng-controller="DemoOneCtrl"> 
    <p ng-show="show">Hello World</p> 
</div> 
+0

它最好能夠在這裏添加代碼,例如,該服務可以在任何時刻消失。 – Makoto

回答

1

一種方法是將ng-show綁定到服務功能。

app.controller('MainCtrl', function($scope, mainService) { 
    var flag = false; 
    $scope.btn = function() { 
    flag = !flag; 
    mainService.setData(flag); 
    } 
}); 

app.controller('DemoOneCtrl', function($scope, mainService) { 
    $scope.name   = 'World'; 
    $scope.mainService = mainService; 
    $scope.show   = mainService.getData; 

}); 

app.service('mainService', function() { 
    var data = false; 
    this.setData = function (str) { 
    data = str; 
    }; 

    this.getData = function() { 
    return data; 
    }; 
}); 

通知$scope.show怎麼設置成mainService.getData。現在您可以綁定show()ng-show

<p ng-show="show()">Hello World</p> 

沒有$watch需要。

Demo

+0

非常好!我不知道,但它只解決了這種情況,我需要另一種解決方案,如果它存在。 –

+0

這是我做的:http://plnkr.co/edit/gwm630khKzfUfFURjt4k?p=preview –