ส่งผ่านพารามิเตอร์ภายใน $ location.path ใน Angular


88

ฉันแค่พยายามใช้$location.path()ในคอนโทรลเลอร์ แต่ยังส่งตัวแปรที่กำหนดเองเป็นพารามิเตอร์ด้วย มันจะเป็นแบบนี้ฉันเดาว่า:

$scope.parameter = 'Foo';

$location.path('/myURL/' + $scope.parameter);

แต่นั่นไม่ได้ผล ใครรู้ว่าควรทำอย่างไรใน Angular?

คำตอบ:


184

ในการเพิ่มพารามิเตอร์คุณควรใช้$location.search()วิธีการดังนี้:

$location.path('/myURL/').search({param: 'value'});

$locationวิธีการมีchainable

ผลิตผลนี้:

/myURL/?param=value

ตรวจสอบการสะกดตัวพิมพ์ใหญ่ / ตัวพิมพ์เล็กและการผูก
mohsen dorparasti

มีวิธีใดบ้างในการแปลงสิ่งนี้เพื่อให้ url ดูเหมือน / myUrl / value แทน / myURL /? param = value?
AzzyDude

1
คุณสามารถใช้. เส้นทาง ('/ myURL /' + ค่า) แต่จะไม่เรียกว่าพารามิเตอร์อีกต่อไป
mohsen dorparasti

2
ฉันต้องลบการต่อท้าย / เพื่อให้มันใช้งานได้ รหัสนี้เป็นสำเนาที่ใช้งานได้ $location.path('/myURL').search({param: 'value'});
bodagetta

38

อีกวิธีในการเพิ่มพารามิเตอร์ใน url คือ:

 $location.path('/myURL/'+ param1);

และคุณสามารถกำหนดเส้นทางไปยัง myPage.html:

config(['$routeProvider', function ($routeProvider) {
        $routeProvider.when('/myURL/:param1', {
            templateUrl: 'path/myPage.html',
            controller: newController
            });
    }]);

จากนั้นพารามิเตอร์สามารถเข้าถึงได้ใน newController ดังนี้:

var param1= $routeParams.param1;

1
คำตอบนั้นเป็นการเพิ่มพารามิเตอร์การค้นหาหรือแอตทริบิวต์เส้นทางหรือไม่
ฟิลิป

13

ตัวอย่างเช่นหากคุณต้องการใส่พารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์ใน URL:

$location.path('/path').search({foo: 'valueFoo', baz:'valueBaz'})

ใน url ของคุณจะเป็นตัวแทน

/path?foo=valueFoo&baz=valueBaz

ในการรับพารามิเตอร์ในคอนโทรลเลอร์อื่น:

var urlParams = $location.search();


urlParams.foo will return valueFoo

urlParams.baz will return valueBaz

2
  function pathToSomewhere() {
    $stateParams.name= vm.name; //john
    $stateParams.phone= vm.phone; //1234
    $stateParams.dateOfBirth= getDoB(); //10-10-1990

    $location.path("/somewhere/").search($stateParams);

  };

ผลลัพธ์นี้ใน url

http://middle-of-nowhere.com/#/somewhere/?name=john&phone=1234&dateOfBirth=10-10-1990

วิธีนี้ทำให้คุณไม่ต้องพิมพ์พารามิเตอร์ในวงเล็บด้วยตนเอง


ฉันสมมติว่าคุณมี $ stateParams ฉีดเข้าไปในคอนโทรลเลอร์ของคุณเพื่อให้สิ่งนี้ทำงานได้
FilipeG
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.