使用Factory将值从控制器传递到AngularJs中的控制器

时间:2017-09-23 12:18:30

标签: angularjs

我尝试使用ng-click工厂将值从controller1传递到controller2,现在我添加了路由

    var app = angular.module("myApp", ['ui.router']);

  app.config(function ($stateProvider, $urlRouterProvider) {

$urlRouterProvider.otherwise('/home');

$stateProvider
.state('ShowData', {
    url: '/ShowData',
    templateUrl: '../Pages/Show.html'
})
.state('EditData', {
    url: '/EditData',
    controller:'Editctrl',
    templateUrl: '../Pages/Edit.html'
})
    });

    app.controller('Controller1', function ($scope, $http, Phyfactory) {
    //Here I am calling a factory
    $scope.open = function (name) {

        var message = name;

        console.log('Hcpname', message);
        Phyfactory.set(message);
        $location.url('/EditData');

    // this is my second controller

    app.controller('Editctrl', function ($scope, Phyfactory) {
        alert('cntrl2');
$scope.fks = Phyfactory.get();
    });

我想将此值绑定到文本框

    <div ng-controller="Controller2">
    Name: <input type="text" ng-model="fks" />
    </div>

//这是我的工厂

    app.factory("Phyfactory", function () {
      var phyname = {};

    function set(data) {
    phyname = data;
    alert('Inside set :' + phyname);
     }

function get() {
    alert('Inside get :' + Object.values(phyname));
    return phyname;
}
return {
    set: set,get:get
}

})

根据请求为controller1添加HTML部分,我在td

中调用ng-click
    <div ng-app="myApp" ng-controller="controller1"
    <table class="wtable">


        <tr>
            <th class="wth">
                A
            </th>
            <th class="wth">
                B
            </th>                
        </tr>
        <tr ng-repeat="tab in Phyperform | filter:search.view_nm|filter:search.time_period|filter:search.team_nm">
            <td class="wtd" ><a ng-click="open(tab.A)"> {{tab.A}} </a> </td>
            <td class="wtd"> {{tab.B}} </td>                
        </tr>
    </table>

值不会传递给controller2,也不会重定向。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

window.location.href

将重定向到应用程序之外,您必须使用$ location路由。

当然,在控制器之间传递数据的更好方法是使用事件!

使用如下事件:

这是控制器2中的事件接收器:

$scope.$on('myCustomEvent', function (event, data) {
  console.log(data); // 'Data to send'
});

这是控制器1中的发件人事件:

$scope.$emit('myCustomEvent', 'Data to send');

答案 1 :(得分:0)

信用转到此帖子“Sharing Data between pages in AngularJS returning empty

我可以使用sessionStorage。