Angular-UI-Router:ui-sref没有使用参数构建href

Sch*_*ann 8 javascript angularjs angular-ui-router

我有一个HTML页面,一旦在用户的浏览器中加载,'list'状态被激活,'list'部分被Angular拉出并填充了服务器列表.

每个服务器都有一个"详细信息"链接,用于指定该服务器的"详细信息"状态.

<td><a ui-sref="details({ serverName: '{{server.name}}' })">Details</a></td>
Run Code Online (Sandbox Code Playgroud)

渲染时,'ui-sref'会根据路径及其可选参数生成预期的'href'网址.

<a ui-sref="details({ serverName: 'SLCMedia' })" href="#/details/SLCMedia">Details</a>
Run Code Online (Sandbox Code Playgroud)

单击时,它按预期工作,并拉出"详细信息"部分,并在分配给该状态的控制器中拉出指定名称的服务器.

我遇到的问题是,一旦加载'细节'部分,它也有一个'ui-sref'到'edit'状态.

   <a ui-sref="edit({ serverName: '{{server.name}}' })">
        <button class="btn btn-lg btn-labeled btn-primary">
            <span class="btn-label icon fa fa-edit"></span>
            Edit
        </button>
    </a>
Run Code Online (Sandbox Code Playgroud)

但是当加载此部分时,'ui-sref'不会生成正确的'href'网址.

   <a ui-sref="edit({ serverName: 'SLCMedia' })" href="#/edit/">
        <button class="btn btn-lg btn-labeled btn-primary">
            <span class="btn-label icon fa fa-edit"></span>
            Edit
        </button>
    </a>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的那样,'href'网址是'#/ edit /'而不是'#/ edit/SLCMedia'.它必须是我想念的简单事物.国家的变化是否与它有关?

以下是该页面的所有已定义"状态".

// Create the Angular App to rule the Server Management Page
var serverApp = angular.module('serverApp', [
    'ui.router',
    'serverControllers',
    'utilitiesService'
]);

serverApp.config(function ($stateProvider, $urlRouterProvider) {
    // For any unmatched url, redirect to /state1
    $urlRouterProvider.otherwise("/list");

    // Now set up the states
    $stateProvider
        .state('list', {
            url: '/list',
            templateUrl: '/views/pages/servers/list.html',
            controller: 'serverListCtrl'
        })
        .state('details', {
            url: '/details/:serverName',
            templateUrl: '/views/pages/servers/details.html',
            controller: 'serverDetailsCtrl'
        })
        .state('create', {
            url: '/create',
            templateUrl: '/views/pages/servers/create.html'
        })
        .state('edit', {
            url: '/edit/:serverName',
            templateUrl: '/views/pages/servers/edit.html',
            controller: 'serverEditCtrl'
        })
});
Run Code Online (Sandbox Code Playgroud)

这是我的控制器

var serverControllers = angular.module('serverControllers', ['utilitiesService']);

serverControllers.controller('serverListCtrl', function ($scope, $http) {
    $http.get('/servers/getList').success(function (data) {
        $scope.serverList = data;
    });
});

serverControllers.controller('serverDetailsCtrl', function ($scope, $stateParams, $http) {
    var serverName = $stateParams.serverName;

    $http.get('/servers/getServerByName/' + serverName).success(function (data) {
        $scope.server = data;
    });
});

serverControllers.controller('serverEditCtrl', function ($scope, $stateParams, $http, $state, showAlertMessage) {
    var serverName = $stateParams.serverName;

    $http.get('/servers/getServerByName/' + serverName).success(function (data) {
        $scope.server = data;
    });

    $scope.server.submitForm = function (item, event) {
        console.log("--> Submitting Server Update");

        //TIMDO: Verify all required fields have been included

        var responsePromise = $http.post("/servers/postEdit", $scope.server, {});
        responsePromise.success(function(dataFromServer, status, headers, config) {
            showAlertMessage({
                type: 'success',
                title: 'Success',
                message: 'Server information updated'
            });

            $state.go('clear');
        });
        responsePromise.error(function(data, status, headers, config) {
            showAlertMessage({
                type: 'error',
                title: 'Success',
                message: 'Server information updated'
            });
        });
    }
});
Run Code Online (Sandbox Code Playgroud)

Jas*_*ett 21

嗯,我可能误解了你的问题,但我发现你的代码外观和我的外观之间至少有一个明显的区别.

我的angular-ui-router链接看起来像这样:

<a ui-sref="reps-show({ id: rep.id })">{{rep.name}}</a>
Run Code Online (Sandbox Code Playgroud)

不同的是周围没有牙箍rep.id.所以我想知道是否改变这一点

<td><a ui-sref="details({ serverName: '{{server.name}}' })">Details</a></td>
Run Code Online (Sandbox Code Playgroud)

对此

<td><a ui-sref="details({ serverName: server.name })">Details</a></td>
Run Code Online (Sandbox Code Playgroud)

可能会为你做点什么.

这可能不是它,但这是我想到的第一件事.