angular.js构建一个完全自定义的$ state.go()

时间:2016-11-06 20:38:48

标签: javascript angularjs

我试图以多种方式做到这一点,ui-sref对我不起作用,因为数据在创建时就不确定了。

即使是编程,我也很新,但是这些日子里很有争议。

重点是,这可以真正创建一个完全自定义的$ state.go吗?

当我说完全自定义时,我怎样才能构建参数的关键字? 在: $ state.go(stateName,{key:value}

由于

angular.module('app').directive('directive', ['$state', function ($state) {


  function link(scope, elements, attibutes) {
  //variable data coming example
    data = {
      name: 'name',
      params: {
        key: 'id',
        value: 'sidvalue'
      }
    }

    scope.back = function (data) {
      $state.go(data.name, '{' + data.params.key + ':"' + data.params.value + '"}');
    }
  }

  return {
    restrict: 'E',
    link: link,
    templateUrl: 'path.html'
  };

}]);

编辑:********* 这是一个历史悠久的工厂从每个州收集信息,并通过我的逻辑从我的逻辑中获取它,方便的get:

 angular.module('app').factory('Historic', ['$q', '$state', function ($q, $state) {
var historic = [];
return {
  historic: {
    push: function (key, value) {
      var str, init = 'general.home';
      str = {
        name: $state.current.name,
        params: {
          key: key,
          value: value
        }
      };

      if ($state.current.name === init) {
        historic = [{
          name: $state.current.name,
        }];
      } else if (historic.length <= 0) {
        historic.push({name: init});
      } else if (historic[historic.length - 1].name !== str.name && historic[historic.length - 1].params !== str.params) {
        historic.push(str);
      }

    },

    get: function () {
      var h = historic[historic.length - 2];
      if (historic.length === 1) {
        h = historic[0];
      }
      return $q(function (resolve, reject) {
        resolve(h);
      });
    },
    pop: function () {
      historic.pop();
    },
    status: function () {
      return historic.length;
    }
  }
};
}]);

为了得到它我正在使用附加了更多代码的指令。 仅发布与历史部分相关的内容。

angular.module('app').directive('directiveName', ['$state', 'fHistoric', function ($state, fHistoric) {

function link(scope, elements, attibutes) {

  /*
  historic setup
  */

  if (fHistoric.historic.status > 3) {
    scope.home = true;
  }

  function keycomp(data) {
    if (data.params) {
      key = {id: data.params.value};
    } else {
      key = {};
    }
  }

  scope.back = function () {
    fHistoric.historic.get()
      .then(function (data) {
        keycomp(data);
        if (key) {
          $state.go(data.name, key);
        } else {
          $state.go(data.name);
        }
      });
    fHistoric.historic.pop();
  };
}

return {
  restrict: 'E',
  link: link,
  scope: {
    header: '@',
    state: '@'
  },
  templateUrl: 'path.html'
};
}]);

我真的不喜欢提出的解决方案,它正在工作但是关键值的问题让我包装了一些spaguetti代码我真的不喜欢解决id:来自键值。

接受新想法。 ;)

0 个答案:

没有答案